是否可以捕获"允许的[n]字节的内存大小耗尽"使用ErrorHandler / ExceptionHandler模块在Silex中出现致命错误?
一个简单的测试用例说明了如何轻松捕获其他类型的致命错误 - 例如,以下内容将捕获PHP app.staticTexts["myAccessibilityLabel"]
致命错误:
String size overflow
但是这对于内存超出致命错误没有效果:以下代码触发了一个不会被捕获的致命错误:
use Symfony\Component\Debug\ErrorHandler;
use Symfony\Component\Debug\ExceptionHandler;
$errorHandler = function($e) {
error_log("Caught an error!");
};
ErrorHandler::register();
$exceptionHandler = ExceptionHandler::register();
$exceptionHandler->setHandler($errorHandler);
$a = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
while (true) {
$a .= $a;
}
是否可以使用Silex捕获这些致命错误,或者我是否需要使用PHP的本地use Symfony\Component\Debug\ErrorHandler;
use Symfony\Component\Debug\ExceptionHandler;
$errorHandler = function($e) {
error_log("Caught an error!");
};
ErrorHandler::register();
$exceptionHandler = ExceptionHandler::register();
$exceptionHandler->setHandler($errorHandler);
$a = ['a' => ['AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']];
while (true) {
$a[] = $a;
}
?
答案 0 :(得分:1)
根据@CharlotteDunois comment - 否,您无法通过异常处理程序捕获错误。您甚至无法捕获“内存大小耗尽”错误并继续执行异常。因为就像错误所说的那样,除了抛出错误和退出之外,没有任何记忆可以做任何事情。