Foros del Web » Programando para Internet » PHP »

Dos niveles de include

Estas en el tema de Dos niveles de include en el foro de PHP en Foros del Web. Tengo un include de un archivo, que a su vez hace un include. Pero ese "segundo" include me da error al traer el archivo, y ...
  #1 (permalink)  
Antiguo 21/09/2009, 12:58
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Tengo un include de un archivo, que a su vez hace un include.


Pero ese "segundo" include me da error al traer el archivo, y se me hace un lio.


Que pasa cuando va un include dentro de otro? El segundo tiene una ruta relativa a si mismo o al primer archivo?

El error, puntualmente, es este:

Cita:
<b>Warning</b>: include(../utilidades/leer_directorio_imagenes.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in <b>D:\wamp\www\astarbagus\paginas\muebles.php</b> on line <b>30</b><br />
<br />
<b>Warning</b>: include() [<a href='function.include'>function.include</a>]: Failed opening '../utilidades/leer_directorio_imagenes.php' for inclusion (include_path='.;C:\php5\pear') in <b>D:\wamp\www\astarbagus\paginas\muebles.php</b> on line <b>30</b><br />
Pero a la mañana me funcionaba bien el script!

Lo que necesito que el pedido del include sea valido segun la posicion del segundo archivo, no del primero.

Última edición por GatorV; 21/09/2009 a las 20:10
  #2 (permalink)  
Antiguo 21/09/2009, 13:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Dos niveles de include

Tienes que analizarlo que el include va a correr de acuerdo donde este el archivo. Ejemplo
Código HTML:
index.php
directorio1
  include.php
directorio2
  archivo.php
Si yo tengo un include dentro de index.php y llamo al include.php. Pero include.php tiene un include que llama a archivo.php, tienes que llamarlo desde el archivo de include.php no como si estuvieras llamandolo desde index.php.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 21/09/2009, 13:53
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Dos niveles de include

Ahora que vi tu dibujo, lo analicé.

Tengo 4 includes encadenados.

Todos obedecen al index.php, y el ultimo es mi gran tema porque tiene una ruta que para las llamadas en ajax va bien (porque es ruta relativa). Pero para los includes no. Entonces tengo que modificar 27 archivos que tienen ese include, y poner un condicional. ; (

O averiguar cual es mi directorio raizy usarlo SIEMPRE. Tanto para ajax como para include. Pero busque y busque y no pude.

Doy el tema por resuelto. GRACIAS!
  #4 (permalink)  
Antiguo 21/09/2009, 13:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Dos niveles de include

Puedes usar rutas absolutas tambien para este tipo de problemas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 21/09/2009, 14:02
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: Dos niveles de include

Gracias, si. Estuve buscando y probando de todo. Y esto funciona:

Cita:
define('BASE_DIR', dirname(__FILE__));

include BASE_DIR . '/foo/bar.php';
Lo que no tenia claro era que podia usar el include sin parentesis. Y con parentesis no funcionaba.

EDITADO

SI funciona tambien.
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 11:54.