0

PHP と Mysqli を使用して構築された Web サイトがあり、エラー処理について考える必要があります。

自分のコードが完璧だと思っていても、Web サイトを公開するとエラーが発生します。ユーザーのエラーを非表示にする方法を示すこの回答を見つけましたが、開発者は引き続きそれらを見ることができます。これが本当に私のサイトにとって最善のアプローチであるかどうかはわかりませんが。PHP自体が生成した醜いエラーメッセージをユーザーに見せたくありませんが、エラーに応じて独自のエラーメッセージを設計できます。

  1. これらのエラーをどのように管理すればよいですか? それらをすべてデータベースに保存する必要がありますか?
  2. どのエラーが発生する可能性があるかを知るにはどうすればよいですか?
4

5 に答える 5

2

PHP には、さまざまな種類のエラーをキャッチする組み込み関数があります。

set_error_handler

この関数を使用して、すべてのページでエラーをキャプチャする必要があります。カスタム コードを記述して、エラーをデータベースに挿入するか、別のエラー ログ ファイルに書き込むか、電子メールで開発者にすぐに通知するかを決定できます。

于 2013-01-28T12:10:58.760 に答える
0
error_reporting(E_ALL);
ini_set('display_errors','On');

ini_set('error_log', 'error.log');
ini_set('log_errors', 'On');

これらの関数は、エラーがあればそれを表示し、error.log にエラーをリストします。エラーがサイトに表示されないようにしたい場合は、値を「オン」から「オフ」に設定できます。開発者ではなくユーザーからのみ非表示にする場合は、「ini_set('display_errors','off');」を設定できます。これらはユーザーには表示されませんが、開発者は error.log から解決できます

于 2013-01-28T12:26:34.113 に答える
0

エラーの処理は、アプリケーションの最も重要な側面の 1 つです。ユーザーはそれが機能することを期待していますが、エラーが発生すると、アプリケーションが優れていても、アプリケーションに対する信頼を失う可能性があります。私はそれを難し​​い方法で学びました。

次のようなクラスを使用します。

class ErrorHandler
{   
    public static function registerHandlers()
    {
        $inst = new ErrorHandler;
        set_error_handler(array(&$inst, 'errorHandler'), E_ALL);
        set_exception_handler(array(&$inst, 'exceptionHandler'));
        register_shutdown_function(array(&$inst, 'shutdownHandler'));
    }

    public function shutdownHandler()
    {
        if (($error = error_get_last()))
        {
            $this->_clearOutputBuffers();
            // Handle error
        }
    }

    public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
    {
        $this->_clearOutputBuffers();
        // Handle error
    }

    public function exceptionHandler(Exception $exception)
    {   
        $this->_clearOutputBuffers();
        // Handle error
    }

    private function _getErrorCode($sMessage, $sFile, $nLine, $nCode)
    {
        $errorCode = sprintf("%u", crc32($sMessage.$sFile.$nLine.$nCode));
    }

    private function _clearOutputBuffers()
    {
        if (count(ob_list_handlers()) > 0)
        {
            ob_clean();
        }
    }
}

このクラスは、ほとんどのエラーをキャッチすることができ、デバッグ目的でも驚くほどうまく機能します。エラーが検出されるたびに、後で参照できるようにすべての情報をファイルに書き込みます。さらに、開発環境と本番環境を分離し、個別のエラー画面を用意しています。

開発環境では、ファイルの抽出、スタック トレース、および変数を表示するエラー画面を使用します。

本番環境では、_getErrorCode から返されたエラー番号を含むエラー画面が表示されます。顧客がエラーについて私たちに連絡したい場合、彼がしなければならないことは私たちに番号を伝えるだけで、すぐにそれを調べてすべてのデータを目の前に置くことができます.

開発エラー画面のスクリーンショットを添付しました。

エラー画面のサンプル画像

于 2013-01-28T13:56:29.110 に答える
0

これらのエラーをどのように管理すればよいですか?

それらを記録し、ログを分析して解決する必要があります (または、少なくともサイトが安全であることを確認してください)。

それらをすべてデータベースに保存する必要がありますか?

いいえ - データベース接続の問題が見えなくなります。正しい方法は、ローカル マシンの syslog 機能を使用することです。

どのエラーが発生する可能性があるかを知るにはどうすればよいですか?

? それらのすべて。

于 2013-01-28T13:06:28.157 に答える
0

私は使用することから始めます

 try 
    { 
     //your code here 
     } 
 catch(Exception $ex) 
     { 
     echo $ex->getMessage();
     }

データベースクエリを実行するとき。エラー処理は、ファイルなどに記録することができます。そうすれば、何が起こっているのかを把握し、何をする必要があるかを自分で設定できます....

于 2013-01-28T12:12:04.480 に答える