Относительные файлы включения
У меня есть файл
работники /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__
)
Или определите константу в первом файле, которая указывает на корневой каталог, и используйте ее в ваших включениях.