Настройка include path в PHP периодически завершается сбоем
-
09-06-2019 - |
Вопрос
Я пробовал и то, и другое :
ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes');
а также :
php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes"
в файле .htaccess.
На самом деле оба метода выполняйте работу но только с перерывами.То есть они будут нормально работать примерно для 37 запросов страниц, а затем завершатся ошибкой примерно для 42 запросов страниц, что приведет к вызову require(), вызывающему неустранимую ошибку, эффективно приводящую к сбою сайта.
Я даже не уверен, с чего начать, пытаясь выяснить, что происходит!
Похоже, вы продублировали текущий каталог в вашем включаемом пути.Попробуйте удалить одно из '.:' из вашей строки.
Версия in script изначально была
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
и, таким образом, .:.:шел по существующему пути:
ini_get('include_path')
Я все равно попытался удалить его, но проблема не устранена.
Решение
Оказалось, что проблема была связана с ошибкой PHP в версии 5.2.5
Установка "admin_flag" для include_path привела к тому, что include path был пустым в некоторых запросах, и Plesk устанавливает admin_flag в конфигурации по умолчанию для того или иного параметра.Обновление PHP решило проблему.
Другие советы
Вы пробовали set_include_path() set_include_path()?.В качестве преимущества это возвращает false при сбое, позволяя вам, по крайней мере, уловить событие и сгенерировать некоторые значимые отладочные данные.Кроме того, вы должны использовать константу PATH_SEPARATOR
поскольку это отличается между windows / * nix.
В качестве конкретного примера:
set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());
(get_include_path() в конце означает, что независимо от того, на какой ваш путь ini / htaccess установлен, он останется)
Похоже, вы продублировали текущий каталог в вашем включаемом пути.Попробуйте удалить одно из '.:' из вашей строки.