質問
私は両方を試しました:
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() 呼び出しが発生し、致命的なエラーが発生してサイトが事実上クラッシュします。
何が起こっているのかを知りたいのですが、どこから始めればよいのかさえわかりません。
@ノート
インクルード パス内の現在のディレクトリを複製したようです。文字列から「.:」の 1 つを削除してみてください。
スクリプト版は元々
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
したがって、.:.:既存のパスから来ていました:
ini_get('include_path')
とにかく削除してみましたが、問題は解決しません。
解決
この問題は 5.2.5 の PHP バグに関連していることが判明しました。
include_path に「admin_flag」を設定すると、一部のリクエストでインクルード パスが空になり、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 パスの設定がそのまま残ることを意味します)
インクルード パス内の現在のディレクトリを複製したようです。文字列から「.:」の 1 つを削除してみてください。