如何捕获致命错误:PHP 中的最大执行时间超过了 30 秒

新手上路,请多包涵

我一直在玩我正在开发的系统并设法让它导致这个:

致命错误:超过 30 秒的最大执行时间

它发生在我做一些不切实际的事情时,但它可能发生在用户身上。

有谁知道是否有办法捕捉这个异常?我已经阅读过,但似乎每个人都建议增加允许的时间。

原文由 ingh.am 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 660
2 个回答

您唯一的选择是增加脚本的允许执行时间(将其设置为 0 使其无限,但不建议这样做)或产生一个新线程并希望最好。

无法捕获的原因是它并没有真正被抛出。没有一行代码实际上触发了错误,而是 PHP 说:“不,抱歉,这太长了。现在该关闭了。”这是有道理的。想象一下,在一个设计不佳的程序中,有一个最长执行时间为 30 秒的脚本捕获该错误并再花费 30 秒……这会带来一些相当讨厌的利用机会。至少,它会为 DOS 攻击创造机会。

原文由 cwallenpoole 发布,翻译遵循 CC BY-SA 3.0 许可协议

是的,我测试了 TheJanOnline 的解决方案。 sleep() 不计入 php 执行时间,所以这里是无限循环的 WORKING 版本:

 <?php
function shutdown()
 {
     $a=error_get_last();
     if($a==null)
         echo "No errors";
     else
          print_r($a);

 }
register_shutdown_function('shutdown');
ini_set('max_execution_time',1 );
while(1) {/*nothing*/}
// will die after 1 sec and print error
?>

原文由 user591368 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题