Php require () - Реальные пути - PullRequest
       17

Php require () - Реальные пути

0 голосов
/ 12 января 2011

Вот такой глупый вопрос.Когда файл A выполняет include () файла B, а файл B выполняет включение файла C, и все пути являются относительными, это «дочерние» ссылки относительно их собственного пути или «основного» файла (файл A) в который они включены?

, например:

структура каталогов

Root

header.html (файл B)

/ images / logo.png (файл C)

/ site / index.php (Файл A)

index.php содержит: include ('../ header.html');

header.html содержит: include('images / logo.png');

Будет ли это работать?Или, так как index.php является «основным» файлом, он попытается найти «изображения» в папке «sites»?

Ответы [ 2 ]

1 голос
/ 12 января 2011

Они всегда относительно "основного" файла. Включенные файлы рассматриваются как «инъекции» исходного кода в основной сценарий, поэтому они ведут себя так, как если бы они были внутри основного сценария.

Для адресации чего-либо относительно текущего текущего файла используйте константы __FILE__ и __DIR__, которые всегда указывают на файл, в котором они находятся.

1 голос
/ 12 января 2011

Пути указаны относительно рабочего каталога.Начальный рабочий каталог - это каталог, содержащий файл PHP, который был выполнен непосредственно в ответ на запрос HTTP (то есть то, что вы назвали master file.).

include не делаетизмените рабочий каталог, но его можно изменить вручную, вызвав chdir .Однако я советую не менять рабочий каталог исключительно ради include.

Лучше использовать set_include_path или соответствующий параметр конфигурации или, как предложил Пекка, использовать __DIR__ для построенияимя файла относительно каталога текущего файла.

...