ホームページ  >  記事  >  バックエンド開発  >  PHP set_error_handler() 関数の使用_PHP チュートリアル

PHP set_error_handler() 関数の使用_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:34:08834ブラウズ

プログラムを書くと必ず問題が発生します(問題が頻繁に発生します)。PHP でエラーが発生すると、エラー スクリプトの場所、行番号、および理由が表示されます。大したことではないと言う人も多い。実際、デバッグ段階では、これは実際には問題ではなく、エラー パスを示すことが必要だと思います。

しかし、一部の侵入者にとって、実際のパスが漏洩した場合の影響は想像を絶するものであり、実際、多くのサーバーがこの問題を抱えています。ネットワーク管理者の中には、PHP 設定ファイルの display_errors を Off に設定するだけで問題を解決する人もいます (私たちがそうしたようです) が、この方法はあまりにも消極的すぎると思います。

デバッグのためにエラー情報を返すために PHP が本当に必要になる場合があります。また、何か問題が発生した場合は、ユーザーに説明したり、別のページに移動したりする必要がある場合もあります。

それで、解決策は何でしょうか?

set_error_handler()

PHP は 4.1.0 以降、カスタム エラー処理ハンドラー用の関数 set_error_handler() を提供していますが、これについて知っているスクリプト作成者はほとんどいません。 set_error_handler 関数はエラー パスの漏洩を防ぐことができますが、もちろん他の関数もあります。

  1. はエラーをブロックするために使用できます。 エラーが発生すると、一部の情報がユーザーに公開され、ハッカーが Web サイトを攻撃するツールとなる可能性が非常に高くなります。 次に、ユーザーにあなたのレベルが非常に低いと感じさせます。
  2. エラー情報を書き留めて、本番環境の問題を時間内に発見できます。
  3. エラーが発生した場合、対応する処理を実行して、事前定義されたエラーページにジャンプして、より良いユーザーエクスペリエンスを提供できます。
  4. デバッグ ツールとして使用できます。場合によっては、運用環境で何かをデバッグする必要がありますが、それを使用しているユーザーに影響を与えたくない場合があります。
  5. 。 。 。 。

set_error_handler の使用法は次のとおりです:

リーリー

今度は、カスタム エラー処理を使用して実際のパスを除外します。変数 $admin があるとします。これを使用して、訪問者が管理者であるかどうかを判断します (この判断は、IP またはログインしたユーザー ID によって行うことができます)

リーリー

このようにエラー処理関数がカスタマイズされていますが、このカスタム関数にエラー処理を引き継ぐにはどうすればよいでしょうか?

リーリー

とても簡単です。このようにして、セキュリティとデバッグの利便性の間の矛盾をうまく解決できます。また、Web サイトのスタイルに合わせてエラー メッセージをより美しくすることも考えられます。

原作者は、私たちの同胞の注意を引くことを願って、注意が必要な2つの点を指摘しました:

  1. E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING はこのハンドルでは処理されません。つまり、最もオリジナルの方法で表示されます。ただし、これらのエラーはコンパイル エラーまたは PHP カーネル エラーによって発生するものであり、通常の状況では発生しません。
  2. set_error_handler()使用後はerror_reporting()が無効になります。つまり、すべてのエラー (上記のエラーを除く) は、処理のためにカスタム関数に渡されます。

最後に、原作者は別の例を挙げました(なんて真面目で責任感のある人なんだろう)

リーリー

要約すると、set_error_handler の 3 つの使用法を次に示します。

れーれー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/752326.html技術記事プログラムを作成すると、必ず問題が発生します (問題に遭遇することはよくあります)。PHP でエラーが発生すると、エラー スクリプトの場所、行番号、および理由が表示されます。多くの人はこれは何でもないと言います...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。