php - try / catch gearman没有捕获超时警告

时间:2013-02-04 01:18:27

标签: php try-catch gearman

我正在使用php gearman客户端,我正试图捕获/忽略齿轮箱服务器脱机时的任何错误:

    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()之前放置一个@符号确实可以抑制错误但是我不知道这是否是政治上正确的做法。

有人能帮助我吗?

1 个答案:

答案 0 :(得分: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);
    }