2

PHP バージョン 5.3.19 を使用しており、次のコードがあります。

set_exception_handler(array($this->main_model,'nothing'));
set_error_handler(array($this->main_model,'nothing'));
error_reporting(0);
foreach ($data as $row){
...
}
restore_error_handler();

今、私はnothingそこでハッキングを試みました.nullとして設定しようとしたため、何もしない関数ですが、それは変更されませんでした.これも変更されません.

ラップも試みましたが、try catchそれでもエラーを処理します。

カスタムエラーハンドラーでエラーを使用しているため、エラーを完全に無効にすることはできません。エラーのループを無効にしたいのですがforeach、関数も呼び出しました@が、カスタムエラーハンドラーを使用したため、機能しなくなりました。

ここで、カスタム ハンドラー php を使用すると無視されることを読みましたerror_reporting

foreach が何があってもエラーを処理しないようにするにはどうすればよいですか?

4

1 に答える 1

0

また、E_ERROR、E_PARSE、E_CORE_ERRORなどの致命的なエラーをログに記録することset_error_handler()もできません。set_exception_handler()

solution問題の原因はregister_shutdown_function ()です。

この関数を使用すると、PHPが不安定な状態になったために強制的にシャットダウンされた場合でも、PHPがシャットダウンしているときに実行されるコールバック関数を登録できます。

これは、シャットダウン機能を登録または登録解除できるカスタムクラスです。

class UnregisterableCallback{

    // Store the Callback for Later
    private $callback;

    // Check if the argument is callable, if so store it
    public function __construct($callback)
    {
        if(is_callable($callback))
        {
            $this->callback = $callback;
        }
        else
        {
            throw new InvalidArgumentException("Not a Callback");
        }
    }

    // Check if the argument has been unregistered, if not call it
    public function call()
    {
        if($this->callback == false)
            return false;

        $callback = $this->callback;
        $callback(); // weird PHP bug
    }

    // Unregister the callback
    public function unregister()
    {
        $this->callback = false;
    }
}

このクラスロジックをコードと一緒に使用できます。

于 2013-01-15T17:19:14.140 に答える