php set_include_path сводит меня с ума

Мне нужно включить файл в PHP, поэтому я делаю

$web_proc = '../res/proc'; //variable read from config file I can't change
//in my file
include_once($web_proc . '/check_sprache.php');

и выходы PHP:

Предупреждение: include_once(../res/proc/check_sprache.php): не удалось открыть поток: нет такого файла или каталога в /Users/user/Sites/site/res/pdf/rechnung.php в строке 62
Предупреждение: include_once(): не удалось открыть '../res/proc/check_sprache.php' для включения (include_path='.:') в /Users/user/Sites/site/res/pdf/rechnung.php в строке 62

Поэтому я изменяю путь включения:

set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__DIR__) . DIRECTORY_SEPARATOR);

и попробуйте еще раз, но PHP выводит:

Предупреждение: include_once(../res/proc/check_sprache.php): не удалось открыть поток: нет такого файла или каталога в /Users/user/Sites/site/res/pdf/rechnung.php в строке 62
Предупреждение: include_once(): не удалось открыть "../res/proc/check_sprache.php" для включения (include_path='.:: / Users / user / Sites / site / res /') в / Users / user / Sites / сайт / res / pdf / rechnung.php на линии 62

Но если, если я сделаю

include_once(dirname(__DIR__). DIRECTORY_SEPARATOR . $pfadweb_proc . '/check_sprache.php');

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

Так что я либо неправильно понимаю путь включения PHP, либо он просто троллит меня.

Кто-нибудь может помочь?

1 ответ

Решение

Путь включения выглядит странно во втором примере; У вас есть два PATH_SEPARATOR персонажи и трейлинг DIRECTORY_SEPARATOR хотя я сомневаюсь, что это проблема.

Попробуйте это вместо этого

set_include_path(implode(PATH_SEPARATOR, [ // use array() if PHP < 5.4
    dirname(__DIR__), // this should be /Users/user/Sites/site/res
    get_include_path()
]));

include_once 'proc/check_sprache.php';

Это добавит родительский каталог (/Users/user/Sites/site/res) из CWD (/Users/user/Sites/site/res/pdf) к вашему включаемому пути.

любой include операторы в любых других файлах могут использовать относительный путь от /Users/user/Sites/site/res,

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