php如何捕获内存异常,安全地捕获PHP中的“允许内存大小耗尽”错误

this answer所示,您可以使用register_shutdown_function()注册一个将检查error_get_last()的回调。

您仍然必须管理由违规代码生成的输出,无论是通过@(关闭)运算符还是ini_set(‘display_errors’,false)

ini_set('display_errors', false);

error_reporting(-1);

set_error_handler(function($code, $string, $file, $line){

throw new ErrorException($string, null, $code, $file, $line);

});

register_shutdown_function(function(){

$error = error_get_last();

if(null !== $error)

{

echo 'Caught at shutdown';

}

});

try

{

while(true)

{

$data .= str_repeat('#', PHP_INT_MAX);

}

}

catch(\Exception $exception)

{

echo 'Caught in try/catch';

}

运行时,输出在关闭时捕捉。不幸的是,ErrorException异常对象不被抛出,因为致命错误触发脚本终止,随后仅在关闭函数中捕获。

您可以在关闭函数中检查$ error数组,了解原因的详细信息,并相应地做出响应。一个建议可以是重新发出请求回您的Web应用程序(在不同的地址,或不同的参数当然),并返回捕获的响应。

我建议保持error_reporting()高(值为-1)虽然,并使用(如其他人建议)错误处理其他与set_error_handler()和ErrorException。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值