Catch"允许的内存大小耗尽" Silex中的致命错误

时间:2015-08-31 15:27:08

标签: php symfony error-handling try-catch silex

是否可以捕获"允许的[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; }

1 个答案:

答案 0 :(得分:1)

根据@CharlotteDunois comment - ,您无法通过异常处理程序捕获错误。您甚至无法捕获“内存大小耗尽”错误并继续执行异常。因为就像错误所说的那样,除了抛出错误和退出之外,没有任何记忆可以做任何事情。