2012-01-26 7 views
3

システムのファイルを組織のサブフォルダに移動しましたが、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); にエラーメッセージが表示されます。

+0

カスタムエラーハンドラが表示されていなくても、通知する方法はありません。失敗した要求はコンパイルエラーを吐き出すはずですが、カスタム作業を行っているので、実際に正しく動作しているかどうかを確認してください。 –

+0

エラー報告を抑制するrequireステートメントに@記号がないことを確認してください。 – ncank

答えて

2

Requireは、存在しないファイルでこの警告を呼び出すと、少なくともこの警告を1回発行します。 、次にE_COMPILE_ERRORを放出して死ぬ。

However

次のエラータイプはユーザ定義関数で扱うことができない。E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING、及びE_STRICTのほとんどははset_error_handler(ファイルに上昇)が呼び出されます。

カスタムエラーハンドラは私が恐れているエラーを決して捕まえません。

+0

私はそれがE_COMPILE_ERRORをキャッチすべきではないことを知っています。しかし、他のすべての致命的なエラーは、PHPのerror_reporting設定を介して画面に表示されます。私はこれのためのテストを設定する必要があります。 – teynon

+0

私はアプリケーションをスキャンし、これを見つけました: error_reporting(E_ERROR | E_WARNING | E_PARSE); したがって、E_COMPILE_ERRORは表示されません。さらに、@DaveRandomは、警告をスローした後、致命的なエラーをスローするのは正しいです。 – teynon

0

本当に必要なのですか? E_WARNINGはrequireの代わりにincludeを使うことを暗示していると思われます。あるいは、おそらくPHP4はこれに関して異なった振る舞いをしていますか?私は正直に覚えていない。

+0

*コメント*この*解答*のように見えます... – DaveRandom

+0

これは間違いなく必須です。私は、必要なものを追加することで問題を再現することができます。 – teynon

+0

謝罪DaveRandom、私は確かにこれを誤って投稿しました... – skoop

関連する問題