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

2022-08-30 08:38:00

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

致命错误: 超出 30 秒的最长执行时间

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

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


答案 1

尝试作为PHP文档怎么样(好吧...至少有一位读者)说:

<?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);
sleep(3);
?>

请查看以下链接:

  1. http://www.php.net/manual/en/function.set-error-handler.php#106061
  2. http://www.php.net/manual/en/function.register-shutdown-function.php

答案 2

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

这不可捕获的原因是它并没有真正被抛出。实际上没有一行代码触发了错误,而是PHP说,“不,对不起,这太长了。现在是时候关门了。这是有道理的。想象一下,一个最大执行时间为30秒的脚本捕获该错误并再花费30秒...在一个设计拙劣的程序中,这开辟了一些相当讨厌的机会来利用。至少,它将为DOS攻击创造机会。


推荐