0

私はphpギアマンクライアントを使用しており、ギアマンサーバーがオフラインの場合にエラーをキャッチ/無視しようとしています:

    try {
        $gearman = new GearmanClient();
        $gearman->addServer('apps-1');
        $gearman->setTimeout(4000);
        $result = $gearman->doNormal("function", "params");
    } catch (Exception $e) {}

ただし、これでも次のエラーメッセージが出力されます。

Warning: GearmanClient::doNormal(): _client_do(GEARMAN_TIMEOUT) occured during gearman_client_run_tasks() -> libgearman/client.cc:154

エラーメッセージは致命的なエラーではなく単なる警告であることは知っていますが、try/catchがそれを抑制することを望んでいました。誰かがこれを回避する方法を知っていますか?$ gearman-> doNormal()の直前に@記号を付けるとエラーが抑制されますが、それが政治的に正しい方法かどうかはわかりません。

誰かが私を助けることができますか?

4

1 に答える 1

2

それは実装によるものです。PHPでは、エラーによって例外が発生することはありません。タイムアウトが発生したときにプログラムに通知を受け取る場合は、を使用して手動でエラーハンドラーに挿入する必要がありますset_error_handler

    $errorHandler = set_error_handler(
         function($errorNumer, $errorString) { 
         //possibly handle error here
         }
    ); 
    $gearman = new GearmanClient();
    $gearman->addServer('apps-1');
    $gearman->setTimeout(4000);
    $result = $gearman->doNormal("function", "params");
    if (isset($errorHandler)) {
        set_error_handle($errorHandler);
    }
于 2013-02-04T01:31:37.493 に答える