0

我正在使用 php gearman 客户端,并且在 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() 之前放置一个 @ 符号确实会抑制错误,但我不知道这是否是政治上正确的做法。

有人可以帮我吗?

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 回答