Настройка включить путь в PHP периодически завершается сбоем
Я пробовал оба варианта:
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(), который приведет к фатальной ошибке, эффективно приводящей к сбою сайта.
Я даже не знаю, с чего начать, пытаясь выяснить, что происходит!
Похоже, вы продублировали текущий каталог в своем пути включения. Попробуйте удалить один из '.:' из вашей строки.
Версия в сценарии изначально была
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
И, таким образом, .:.: исходил из существующего пути:
ini_get('include_path')
Я все равно попытался удалить его, и проблема не устранена.
3 answers
Оказалось, что проблема была связана с ошибкой PHP в 5.2.5
Установка "admin_flag" для include_path привела к тому, что в некоторых запросах путь включения был пустым, и Plesk устанавливает admin_flag в конфигурации по умолчанию для того или иного параметра. Обновление PHP решило эту проблему.
Вы пробовали 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, останется)