Foros del Web » Programando para Internet » PHP »

Problema en el manejo de includes dentro de otros includes.

Estas en el tema de Problema en el manejo de includes dentro de otros includes. en el foro de PHP en Foros del Web. Hola gente, buenas noches... Estoy teniendo un problema con los include, les comento un poco que es lo que me pasa. Tengo esta estructura de ...
  #1 (permalink)  
Antiguo 21/03/2010, 21:33
 
Fecha de Ingreso: marzo-2010
Ubicación: Rosario
Mensajes: 20
Antigüedad: 14 años
Puntos: 2
Problema en el manejo de includes dentro de otros includes.

Hola gente, buenas noches...
Estoy teniendo un problema con los include, les comento un poco que es lo que me pasa.

Tengo esta estructura de carpetas.

clases.
lib
templates
--template1
----images
----js
----css
----contenido
--template2
css
js


eso dentro del directorio local (var/www/test/)
en si el local es /var/www, pero he echo a test un dominio virtual para que cuando ponga test en el navegador vaya a /var/www/test/.

Ahora el problema es el siguiente:
Dentro de la carpeta /template/template1 tengo la estructura gráfica ya armada.
Esta estructura esta armada mediante php y html con css y algo de js, por ende uso muchas veces el <?php include(pagina.php) ?>.
Al crear un archivo dentro del directorio local /var/www/test/ y hacer un include a un archivo de este template no me toma los include de este ultimo, es como que hace referencia partiendo del directorio donde esta el archivo con el primer include.
Para que se entienda mejor...
Dentro de templates/template1, tengo el archivo index.php, que tiene este include:
include("images/imagen1.png"); y también hace referencia al archivo css y js que están dentro de css/style.css y js/codigo.js. En estos casos tomo como raiz la posicion del index del template. así anda bien.
ahora si dentro de otro directorio mas arriba como es el test quiero hacer un include al archivo index.php los includes de este ultimo archivo no me los toma, porque no encuentra la ruta y que la busca dentro del directorio test y no dentro del directorio /test/template/template1 como tendría que ser.

Esto lo resuelvo agregándole el directorio completo a cada include, con el /var/www/test/etc/etc/etc. Pero que pasa cuando lo subo al servidor WEB o lo pase a otro entorno ? no me va a funcionar.
y a las referencias a los archivos de js y css no me los toma con la ruta completa tampoco.
Hay alguna forma de solucionar esto ?
Espero que se aya entendido, no supe como explicarlo mejor .

Desde ya, muchas gracias y saludos.
  #2 (permalink)  
Antiguo 22/03/2010, 06:11
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 3 meses
Puntos: 16
Respuesta: Problema en el manejo de includes dentro de otros includes.

¿porqué no funcionará en el servidor? Yo lo hago exactamente como tu... :S
  #3 (permalink)  
Antiguo 22/03/2010, 07:23
 
Fecha de Ingreso: marzo-2010
Ubicación: Rosario
Mensajes: 20
Antigüedad: 14 años
Puntos: 2
Respuesta: Problema en el manejo de includes dentro de otros includes.

Cita:
Iniciado por millan2525 Ver Mensaje
¿porqué no funcionará en el servidor? Yo lo hago exactamente como tu... :S
Hola Millan2525, si en el servidor que lo coloque tiene otra ruta del patch distinta a la mía no funcionaria, igual el hecho de agregar esa ruta solo me soluciona los includes, pero no las referencias a los css y js.
Tendría que fijarme como maneja todo esto algún gestor de contenido como Drupal, Joomla, y algún otro.


Saludos.
  #4 (permalink)  
Antiguo 22/03/2010, 16:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: Problema en el manejo de includes dentro de otros includes.

Usa rutas absolutas mediante una variable que puedas obtener desde un include en comun para todas las paginas y donde tengas las funciones que mas uses, digamos que sea:

config.php
Código PHP:
Ver original
  1. $dir = '/localhost/proyecto';
  2. $url = 'http://localhost/proyecto';
  3.  
  4. // aqui abajo las funciones que mas utilices, como validacion de secciones, etc.

En el resto de archivos:
Código PHP:
Ver original
  1. <?php
  2. include 'config.php'; // Si estan en el mismo nivel o
  3. // include '../config.php'; // si el archivo esta en un nivel superior
  4.  
  5. include "$dir/archivo.php";
  6. include "$dir/template/css/estilos.php";
  7.  
  8. echo "<a href=\"$url/otro_archivo.php\">Link</a>";
  9. echo "<img src=\"$url/images/icono.gif\" alt=\"Esto es una imagen\" />";
  10.  
  11. // Otra opcion es:
  12. ?>
  13. <script type="text/javascript" src="<?php echo $url; ?>/script/jquery.js"></script>

Asi solo modificas los dos valores en config.php y solucionas el problema.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 22/03/2010, 17:20
 
Fecha de Ingreso: septiembre-2005
Mensajes: 34
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: Problema en el manejo de includes dentro de otros includes.

En cualquier proyecto vas a tener dos tipos básicos de rutas que vas a manejar: las URI y los path de directorio del lado del servidor.
La solución más común es la siguiente:

Código PHP:
Ver original
  1. <?php
  2. // Definimos las costantes
  3. define ('LIBPATH', $_SERVER["DOCUMENT_ROOT"] .'/');
  4. define ('URL', 'http:www.dominio.com/');
  5. define ('JSLIBS', URL.'js/');
  6.  
  7. // Para hacer un include
  8. require_once (LIBPATH .'fichero.php');
  9.  
  10. // Luego para hacer una llamada en HTML
  11. echo '<script type='text/javascript' src="'.JSPATH.'fichero.js'.'"></script>';
  12.  
  13. ?>

Tenés que tener en cuenta que los includes con rutas relativas, PHP los toma relativos al script que se está ejecutando. Hay que tener mucho cuidado con eso porque puede dar lugar a confusiones y errores.

Supongamos la ordenacion del siguiente directorio del dominio prueba.com:

main.php
libs/
--> config.php
--> libDB.php
--> test.php

test.php
Código PHP:
Ver original
  1. include('libDB.php');
  2. // Esto funciona perfecto si llamamos a http://www.prueba.com/libs/test.php

main.php
Código PHP:
Ver original
  1. include('libs/test.php');
  2. // Si llamamos a http://www.prueba.com/main.php no funciona porque PHP
  3. // no encontraría el fichero libDB.php dentro del directorio raiz. Recordá que
  4. // el script en ejecucuón es main.php que se encuentra en /

Esto se solucionaría así:
test.php
Código PHP:
Ver original
  1. include('/libs/libDB.php');
  2. // Notese que agregamos la / inicial para indicar que partimos del directorio raiz

Lo más utilizado para que esto sea portable es, o bien un fichero de configuración como lo ha indicado Triby o bien la utilización de namespaces con __autoload. Justamente hoy he terminado de escribir un artículo (http://pizarradev.blogspot.com/2010/03/namespaces-en-php-53.html) sobre el tema en mi blog, por el cual podés darte una vuelta.
Si vamos al primer ejemplo que te dí, entonces el script completo quedaría así:

config.php
Código PHP:
Ver original
  1. define ('LIBPATH', $_SERVER["DOCUMENT_ROOT"] .'/');

test.php
Código PHP:
Ver original
  1. include(LIBPATH .'libDB.php');

main.php
Código PHP:
Ver original
  1. include(LIBPATH .'config.php');
  2. include(LIBPATH .'test.php');

Siempre intenta utilizar rutas absolutas para evitar problemas.

Espero que te haya servido.
Saludos

Última edición por cheru; 22/03/2010 a las 17:30

Etiquetas: includes, manejo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:17.