2010-07-26 13 views
22

Así, examinar esta estructura de directoriosde llamadas incluyen desde un archivo incluido

  • /include_one.php
  • /include_two.php
  • /directory/main_file.php

Supongamos que estoy en /directory/main_file.php y llamo include('../include_one.php'); dentro de include_one.php, para incluir include_two.php. ¿Debo llamar al include('include_two.php); o al include('../include_two.php');?

Así que mi pregunta es: cuando se incluye un archivo, ¿la 'ruta de inclusión relativa' se desplazó al archivo incluido, o permanece en el archivo principal incluido?

Soy consciente de que la mejor alternativa sería tener un config.php que contenga el root_path, sin embargo, esto no es posible en este momento.


actualización:
Por lo tanto, no estoy seguro de que es correcto, ya que aquí es mi prueba

estructura de directorios

/include.php
/start/start.php
/carpeta1/includeone.php
/folder1/folder2/includetwo.php

y aquí está la contenido de cada archivo

start.php

<?php 
    echo 'including ../include.php<br />'; 
    include('../include.php'); 
?> 

include.php

<?php 
    echo 'including folder1/includeone.php<br />'; 
    include('folder1/includeone.php'); 
?> 

includeone.php

<?php 
    echo 'including folder2/includetwo.php<br />'; 
    include('folder2/includetwo.php'); 
?> 

includetwo.php

<?php 
    echo 'done<br />'; 
?> 

y la salida es

incluyendo ../include.php
incluyendo carpeta1/includeone.php
incluyendo carpeta2/includetwo.php
hecho

+0

todavía no hay respuesta para mi actualización ... – Hailwood

+0

Hola. Creo que esto depende del sistema que ejecuta el código. Actualmente estoy trabajando en un proyecto de 4 años, que se ejecuta en diferentes sistemas operativos y configuraciones. De alguna manera, cada vez que clono el código, tengo que configurar todo nuevamente, mientras que un compañero de trabajo puede simplemente ejecutarlo cada vez que lo clona en su máquina. Actualmente estoy buscando una forma de hacer que PHP cambie la "ruta de inclusión relativa" cada vez que cambie de un archivo a otro. –

Respuesta

40

La "ruta de inclusión relativa" no se desplaza al incluido archivo ... Lo que significa que el uso de rutas relativas generalmente termina mal.

Una mejor solución, que uso casi todo el tiempo, es trabajar siempre con rutas absolutas, y puede mezclar rutas de acceso parciales y absolutas usando __DIR__, para obtener el directorio que contiene el archivo donde está escrito.


Por ejemplo, en include_one.php, tendrá que utilizar:

require_once __DIR__ . '/include_two.php'; 

para incluir el archivo include_two.php que está en el mismo directorio que include_one.php.


Y, en main_file.php, tendrá que utilizar:

require_once __DIR__ . '/../include_one.php'; 

para incluir el archivo include_one.php que es un directorio arriba.


Con eso, sus inclusiones funcionarán, sin importar de qué archivo se llamen.

+3

Para ahorrar espacio, '__DIR__' es equivalente a' dirname (__ FILE __) '. – thomas88wp

0

estoy utilizando este código:

if(!isset($TO_HOME_DIR)) $TO_HOME_DIR="../"; 

Y incluyo un archivo:

include_once($TO_HOME_DIR."common/include_one.php"); 

Con if(!isset($TO_HOME_DIR)), que no es importante cuánto se incluye un archivo en archivo incluido en el archivo incluido en includ ..... Solo se utiliza la declaración del archivo principal -y archivo principal- $ TO_HOME_DIR.

La segunda ventaja de este enfoque es que, si cambia el directorio del archivo, solo necesita cambiar una línea de código; $ TO_HOME_DIR declaración. :)

Cuestiones relacionadas