我正在使用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()之前放置一个@符号确实可以抑制错误但是我不知道这是否是政治上正确的做法。
有人能帮助我吗?
答案 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);
}