システムのファイルを組織のサブフォルダに移動しましたが、require
ステートメントの相対パスが壊れました。これにより、警告が表示されたはずです(E_COMPILE_ERROR
)。しかし、そのエラーの代わりに、アプリケーションのカスタムエラーハンドラがE_WARNING
というエラーをキャッチしました。そこで、顧客のハンドラがメッセージを記録し、結果としてPHP画面が空になりました(die();
が実行されたように)。ここに私たちの地元のハンドラによって作成されたログは、次のとおりです。PHP require文 - 失敗しましたが、E_COMPILE_ERRORの代わりにE_WARNINGをスローします
E_WARNING main(XXXXXX.php): failed to open stream: No such file or directory xxx/xxx.php Line 9 01-26-2012 09:44:27 AM 01-26-2012 10:03:24 AM
私たちのシステムはまだ貧しい古いPHP 4
を使用していることに注意することが重要であろう。
なぜrequireがE_WARNINGをスローするのでしょうか?エラーメッセージが表示されないため、問題の内容を把握するのに少し時間がかかりました。
編集:このアプリケーションは間違いなく必須です。カスタムエラーハンドラは単にPHPのset_error_handler関数を使用しています。したがって、警告、通知、およびユーザーエラー以外のものは呼び出さないでください。
追加編集:
たぶん構造はこれとは何かを持っていますか?ここでは、どのようにその作業です: ( - >手段を備え、=>が必要です意味)
メーン> File1.php => File2.php
それはFile1.phpが含まれているので、警告を投げるのではなく、必須?これは私にとって意味をなさないかもしれませんが、不具合のように見えますか?私は私が私たちのアプリケーションを介してスキャンし、この発見した解決
PHP 5でこれをテストする必要があるかもしれません:
のerror_reporting(| E_WARNING | E_ERROR E_PARSEを)。
したがって、E_COMPILE_ERRORは表示されません。さらに、@DaveRandomは、警告をスローした後、致命的なエラーをスローするのは正しいです。
に変更してください。error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); にエラーメッセージが表示されます。
カスタムエラーハンドラが表示されていなくても、通知する方法はありません。失敗した要求はコンパイルエラーを吐き出すはずですが、カスタム作業を行っているので、実際に正しく動作しているかどうかを確認してください。 –
エラー報告を抑制するrequireステートメントに@記号がないことを確認してください。 – ncank