Путь Путаница: Требует ли, включает, fopen и т. Д. Принимает все их пути одинаково?

Я немного помню из старых PHP дней (лет назад), что разные функции хотели иметь разные пути. Я имею в виду … начиная с разных точек. Некоторые были относительными, другие – абсолютными и т. Д.

Как насчет fopen? Это то же самое, что и требовать? Тот же путь в такой же ситуации?

Пути всегда относятся к местоположению исходного сценария , даже если парсер проходит через include, который находится в другом каталоге.

Чтобы надежно работать с путями относительно текущего файла , используйте

dirname(__FILE__) 

или в PHP 5

 __DIR__ 

кроме того, как @troelskn указывает ниже, require и включите поиск include_path.

include и require будут искать файл по отношению к параметру, указанному в php.ini, в первую очередь.

Скажите, что ваш входной файл include ini:

 include_path = "var / www / includes; / var / www / PEAR"

Тогда в ваших сценариях, где бы вы ни находились в своем дереве документов , например

 /var/www/html/website1/miles/down/in/folders/index.php

вы просто делаете это, чтобы включить файл:

 включить 'settings.php';

Пока settings.php является одной из папок include_path, он будет включен, тогда вы можете перестать беспокоиться об относительных / абсолютных отношениях пути.

Этот параметр может быть изменен в файлах .htaccess и в файле с помощью ini_set (), если вы тоже этого хотите.

Подробнее об этом: http://php.net/manual/en/function.set-include-path.php http://www.modwest.com/help/kb.phtml?cat=5&qid=98

или google для "include_path php"

Arg Я бы хотел прокомментировать, но я не могу …

@troelskn:

Include НЕ разрешает пути include, когда вы используете dirname (__ FILE __), потому что вы даете абсолютный путь к include. Пути включения проверяются только тогда, когда вы НЕ указываете какой-либо путь, только имя файла (не работает ни с абсолютными, ни с относительными путями ).

Если путь определен – абсолютный (начиная с буквы диска или \ на Windows, или / в системах Unix / Linux) или относительно текущего каталога (начиная с. Или ..) – include_path будет вообще проигнорирован.

http://php.net/manual/en/function.include.php

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

 if(is_file($target)){ include $target; } 

is_file, is_dir, fopen – будет использовать путь относительно файла, который был запрошен HTTP-запросом, и на него не будет влиять set_include_path ()

include, require – может иметь другой путь, назначенный с помощью set_include_path ()

Поэтому более корректно приведенный выше код должен выглядеть так:

 if(is_file(get_include_path().'/'.$target)){ include $target; }