require的php脚本内有异常无法捕获
大致情况是我通过socket接收到web的请求后,将请求的资源通过require的方式返回给web。可是如果在reqire的页面内出现异常的话,就会报无法捕获的异常。通过try/catch也无法捕获,注册异常捕获函数也不行。不知道大家有没有碰到过这个问题,是如何解决的呢?
代码片段如下:
try {
ob_start();
// sourcePath是请求的资源,当然肯定是存在的。
//异常也就是出现在这个请求的资源里面。
require $sourcePath;
$response = ob_get_contents();
ob_clean();
} catch (Exception $e) {
$this->logger->error($e);
$response = $e->getMessage();
}
比方说:请求的资源是tail.php,是一个查看日志内容的页面,假设内容如下:
// 并没有getLogfile这个方法,于是这里就会报错。
$logfile = $job->getLogfile();
// ...
换成 Throwable 就可以