我无法让phpErrorHandler工作。我正在使用最新版本的Slim,而我的服务器正在运行PHP 7.1。
use \Slim\App as App;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new App([
'errorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('application error');
};
},
'phpErrorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('runtime error');
};
}
]);
当我从我的代码中抛出一个Exception时,会调用错误处理程序并输出“application error”。但是,当我从我的代码中抛出错误或引入语法错误时,不会调用phpErrorHandler,并且根据我的设置,PHP会生成带有堆栈跟踪的错误消息。
我试过补充一下
ini_set('display_errors', 0); // do not produce the standard output when an error occurs
error_reporting(-1); // enable error reporting (is this required for Slim?)
但是我在该配置中所做的任何更改似乎都不会影响我的闭包是否被调用。
-编辑-
我试图执行一段记录到控制台的Javascript。这适用于errorHandler,而不适用于phpErrorHandler。还简单
die('oops');
在phpErrorHandler中没有做任何事情。似乎根本没有调用回调。
如果我试一试
$app->run();
我能够发现错误。然而,这会导致一些我宁愿避免的令人讨厌的副作用。但是,这告诉我的是,它不是一个配置设置,可以防止我发现错误。
我有同样的问题,并在Slim 3文档中略微误入歧途,该文档提到了phpErrorHandler功能。但是,在版本3.2.0之前,phpErrorHandler没有添加到Slim:https://github.com/slimphp/Slim/releases/tag/3.2.0
如果您使用的是Slim版本<3.2.0,请尝试升级。
也许尝试禁用display_startup_errors
?
我的配置:
error_reporting(E_ALL);
ini_set("display_errors", 0);
ini_set('display_startup_errors', 0);
编辑:也die('oops');
不是一个错误,它只会死/退出脚本的执行,之后什么都不会执行