質問

私は両方を試しました:

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 のアップデートにより問題は解決されました。

http://bugs.php.net/bug.php?id=43677

他のヒント

やってみました 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 つを削除してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top