Относительные файлы include

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

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

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

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

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

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

Вы можете адаптировать второй 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__) чтобы получить путь к каталогу, в котором находится dirname(__FILE__) исполняемый скрипт:

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

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

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