想问下关于异常捕获的问题。我在守护进程下运行。try 了回调方法,但是发现回调里报了致命的错误但是没有捕获,我在stdoutFile 设置的文件里也没有看到错误。比如缺少扩展之类的。进程直接退出了。没有到catch 里那这类的错误要怎么捕获。
示例代码如下
try{
$ret = call_user_func_array(array(SERVICE_DIR."\\".$class, $method), $param_array);//回调里有报错但是没有catch住也就没有上报到日志系统里
}
catch (Exception $e) {
// 发送数据给客户端,发生异常,调用失败
$code = $e->getCode() ? $e->getCode() : 500;
StatisticClient::report($class, $method, $success, $code, $e, $statistic_address);
return $connection->send(array('code' => $code, 'msg' => $e->getMessage(), 'data' => $e));
}
回调里的代码能贴出来么?
PHP 里并不是所有的错误都可以 try-catch,只有 throw 的才可以,所以你的程序要主动检查不符合预期的情形并 throw Exception。如果不是程序逻辑能检查出来的情形,那恐怕就要用 set_error_handler() 这种方法了。
wokerman本身我看注册了 register_shutdown_function(array("\Workerman\Worker", 'checkErrors'));
这个方法。我在想是不是可以在这个方便里直接上报错误。
搜了下别人的回答。wokerman不支持set_exception_handler 这种方式。回调错误。但是你说的set_error_handler 这个支不支持。还要验证一下。
使用\Error可以接着报错
try{
}catch (\Error $e){
}