Вот моя файловая структура на моем веб-сервере cpanel
root
> vendor
> autoload.php
> public_html
> folder
> file2.php
> script_folder
> include_file.php
> file1.php
Внутри include_file.php у меня есть
require_once('../vendor/autoload.php');
file1.php и file2.php содержат один и тот же вызов include_file.php.
require_once($_SERVER["DOCUMENT_ROOT"]."/script_folder/include_file.php");
Это отлично работает, когда я запускаю file1.php, но когда я запускаю file2.php, я получаю следующее сообщение об ошибке.
Нет такого файла или каталога Неустранимая ошибка: require_once(): Не удалось открыть требуемый файл '../vendor/autoload.php' (include_path='.:/opt/cpanel/ea-php71/root/usr/share/pear') в /lvl1/lvl2/public_html/script_folder/include_file.php
Однако, если я изменю require_once('../vendor/autoload.php');
на require_once('../../vendor/autoload.php');
в include_file.php, тогда file2.php будет работать, а file1.php не будет работать. Показывает аналогичную ошибку.
Я понимаю, что это проблема пути к файлу, но я не понимаю, почему. Разве путь в include_file.php
не должен быть всегда одним и тем же, независимо от того, какой файл его вызывает; то есть файл1.php или файл2.php?
Я вижу, что фактический оператор require_once вызывается из include_file.php, но поведение, которое я вижу, заставляет меня думать, что оператор require_once запускается из file1.php или file2.php, что приводит к ошибке пути к файлу.
Может кто-нибудь уточнить?
ОБНОВЛЕНИЕ: внутри include_file.php я пытался использовать:
require_once($_SERVER["DOCUMENT_ROOT"] . '/vendor/autoload.php');
и
require_once(dirname(__FILE__).'/vendor/autoload.php');
ни один из них не работает, поскольку оба возвращают public_html
в качестве основного рабочего каталога. Моя папка vendor
находится за пределами основного рабочего каталога.
то, что возвращается, это:
/script_folder/vendor/autoload.php
Я понимаю, что могу просто указать правильный путь к файлу в начале file1.php
и file2.php
, но я пытался найти способ уменьшить количество требований, которые мне нужны в каждом файле, до одного, указав их на include_file.php
, а затем разрешив include_file.php
сделать остальную работу.
Мой файл include_file.php
содержит несколько других операторов require для других скриптов на моем сервере. Что-то вроде мини-автозагрузчика. Все остальные операторы require работают нормально, кроме autoload.php
, с которым у меня возникли проблемы.
Единственная разница, которую я вижу, заключается в том, что мои другие сценарии находятся в моей папке public_html
, а мой файл autoload.php
находится за пределами public_html
.