4

私のサイトは完全にカスタマイズされているため、コードが適切に記述されていないことを知りたいと思っています。set_exception_handler と set_error_handler を使用して、カスタム クラスを使用してエラーをファイルに記録します。これには、通知と警告が含まれます。

私自身のコード内では、ログはほとんど取得されず、取得したログは実際に修正したいものであるため、これで問題ありません。

ただし、simplePie を使い始めたばかりで、PHP4 と互換性があるため、主に関数を静的に呼び出したり、参照渡しを誤ったりするなどの通知が大量に届きます。

simplePie を調べて修正するのは大変です。そうでなければ、最初からそれを使用することはなかったでしょう。

特定のファイルまたはクラスによって生成されたエラーを特に無視できる方法はありますか? 私の非常に基本的な例外処理の概要は次のとおりです。

    set_exception_handler("CustomExceptionHandler");
    set_error_handler("customErrorHandler");

    /**
     * CustomExceptionHandler()
     *
     * これは、キャッチされない例外がスローされた場合に使用されます。
     *
     * @param object $e オブジェクトとしての例外
     */
    function CustomExceptionHandler(Exception $e) {
        exitToError($e->getMessage());
    }

    /**
     * customErrorHandler()
     *
     * これは、エラーのレベルに関係なく、すべてのエラーに対して呼び出されます。
     */
    function customErrorHandler($errno, $errstr, $errfile, $errline) {
        if(in_array($errno, array(E_USER_ERROR, E_RECOVERABLE_ERROR))) {
            throw new CustomErrorException($errstr, 0, $errno, $errfile, $errline);
        } そうしないと {
            CustomException::logError($errstr, $errno, $errfile, $errline);
        }
        FALSE を返します。
    }

/**
     * クラス CustomErrorException
     *
     * すべての致命的なものを変換するために custom_error_handler() によって使用されます
     * エラーから例外へ。
     *
     * @custom_error_handler() を参照
     * @http://www.php.net/manual/en/class.errorexception.php を参照
     */
    class CustomErrorException extends CustomException {
        /**
         * $重大度
         *
         * 例外の重大度レベル
         *
         * @アクセス保護
         * @var int
         */
        保護された $severity;

        /**
         * __construct()
         *
         * 新しい例外を構築します
         *
         * @access public
         * @param string $message 例外メッセージ
         * @param int $code 例外コード
         * @param int $severity 例外の重大度レベル
         * @param string $filename 例外がスローされたファイル名
         * @param int $lineno 例外がスローされた行番号
         */
        public function __construct($message, $code = null, $severity = E_ERROR, $filename = null, $lineno= null) {
            $this->message = $message;
            $this->code = $code;
            $this->severity = (int)$severity;
            $this->file = $filename;
            $this->line = $lineno;

            self::logError($this->message,$this->code,$this->file,$this->line,$this->getTraceAsString());
        }
    }

    /**
     * クラス CustomException
     *
     * 例外を上書きして、方法をより詳細に制御できるようにします
     * 例外が処理され、ログに記録されます。
     *
     * @see http://www.php.net/manual/en/language.exceptions.extending.php
     */
    class CustomException extends Exception {

        /**
         * __構造
         *
         * すべての魔法を実行させたいので、親コントラクトを呼び出します。私たちはただ欲しい
         * このメソッドを上書きして、エラーを正確に記録できるようにします。
         */
        public function __construct($message, $code = 0, Exception $previous = NULL) {
            親::__construct($メッセージ、$コード);
            self::logError($this->getMessage(),$this->getCode(),$this->getFile(),$this->getLine(),$this->getTraceAsString());
        }

        /**
         * __toString()
         *
         * stringBuilder 関数を使用できるように、この関数を上書きします。
         */
        public function __toString() {
            return self::stringBuilder($this->getMessage(),$this->getCode(),$this->getFile(),$this->getLine(),$this->getTraceAsString());
        }

        /**
         * stringBuilder()
         *
         * この方法を使用して、エラーを構築する標準的な方法を用意しています。
         *何でも利用できる文字列。
         *
         * @access public
         * @param string $message 例外メッセージ
         * @param int $code この例外に割り当てられたコード
         * @param string $file 例外が発生したファイル
         * @param int $line 例外が発生した行
         * @param string $trace バックトレース
         */
        public function stringBuilder($message, $code, $file, $line, $trace='') {
            // return "[".date("dMY H:i:s")."] ".$this->getMessage()." in ".$this->getFile().":".$this- >getLine()."\nスタック トレース:\n".$this->getTraceAsString()."\n";
            return "[".date("dMY H:i:s")."] ".$message." in ".$file.":".$line."\n";
        }

        /**
         * ログエラー()
         *
         *エラーを保存する標準的な方法があるように、メソッドを使用します
         * ログに。
         *
         * 解析が容易な XML を使用します。
         *
         * @access public
         * @param string $message 例外メッセージ
         * @param int $code この例外に割り当てられたコード
         * @param string $file 例外が発生したファイル
         * @param int $line 例外が発生した行
         * @param string $trace バックトレース
         * @todo DomDocument を使用して xml ファイルに書き込むように改善できます
         * ここに記載されているとおり http://www.xml-training-guide.com/append-delete-data-from-xml-using-php.html
         */
        public function logError($message, $code, $file, $line, $trace='') {
            //エラーを保存することを保証するために、標準のテキストファイルに保存します
            file_put_contents(ROOT_URL.ERROR_LOG_TXT,self::stringBuilder($message, $code, $file, $line, $trace),FILE_APPEND);
        }
    }

これは、simplePie がスローする 2 つのエラーの例です。

[01-Aug-2010 00:50:33] 参照による new の戻り値の割り当ては、***\SimplePie.php:738 で廃止されました。
[01-Aug-2010 00:50:34] 非静的メソッド SimplePie_Misc::parse_date() は ***\SimplePie.php:60 で静的に呼び出されるべきではありません
4

3 に答える 3

4

特定のファイルまたはクラスによって生成されたエラーを特に無視できる方法はありますか?

簡単なはずです!カスタムエラーハンドラーをチェックインできます

function customErrorHandler($errno, $errstr, $errfile, $errline)

$errfilesimplePie ファイルの 1 つにあるかどうか、その場合はreturn true;サイレントに。

于 2010-08-01T08:53:14.813 に答える
0

エラー ハンドラーに渡された $errfile パラメーターを調べて、エラーが simplePie 内のどこかで発生しているかどうかを確認できます。ドキュメント: http://php.net/manual/en/function.set-error-handler.php

于 2010-08-01T08:54:33.330 に答える
-1

これらのエラーを削除する必要があります。
1. $foo =& new Object()のような代入で & を削除し
ます 2. 静的メソッドでない場合、メソッドに統計的にアクセスできないため、代わりにObject::method()を使用してみてくださいObject->method()またはfunction method()static function method( ) に変更してみてください

または最善の解決策 - php5でライブラリを見つけてみてください

于 2010-08-01T08:45:56.813 に答える