Относительные файлы включения

У меня есть файл

работники /activity/bulk_action.php, который включает в себя файл

include('../../classes/aclass.php');

Внутри aclass.php это делает:

include ('../tcpdf/config/lang/eng.php');

Кажется, что включение во втором файле использует рабочий каталог первого файла вместо того, чтобы относиться к себе, что приводит к ошибке. Как это работает?

3 ответа

Решение

Вы можете адаптировать второй include с:

include (__DIR__.'/../tcpdf/config/lang/eng.php');

Волшебная константа __DIR__ ссылается на текущий файл.php и, добавив относительный путь после этого, приведет к правильному расположению.

Но это работает только с PHP5.3, и вам придется использовать dirname(__FILE__) вместо этого создайте, если вам нужна совместимость со старыми настройками.

Вы были бы намного лучше, установив правильное значение include_path а затем использовать пути относительно этого каталога.

set_include_path(
    get_include_path() .
    PATH_SEPARATOR .
    realpath(__DIR__ . '/your/lib')
);

include 'tcpdf/config/lang/eng.php';
include 'classes/aclass.php';

Я также предлагаю вам взглянуть на автозагрузку. Это сделает файл включает в себя устаревшие.

Файлы включаются на основе заданного пути к файлу или, если он не указан, указан include_path. Если файл не найден в include_path, include() наконец проверит собственный каталог вызывающего скрипта и текущий рабочий каталог, прежде чем произойдет сбой.

Ты можешь использовать dirname(__FILE__) чтобы получить путь к каталогу, в котором находится исполняемый скрипт:

include(dirname(dirname(__FILE__)) . '/tcpdf/config/lang/eng.php');

(начиная с PHP 5.3, вы можете использовать __DIR__)

Или определите константу в первом файле, которая указывает на корневой каталог, и используйте ее в ваших включениях.

Другие вопросы по тегам