我一直在玩我正在开发的系统并设法让它导致这个:
致命错误:超过 30 秒的最大执行时间
它发生在我做一些不切实际的事情时,但它可能发生在用户身上。
有谁知道是否有办法捕捉这个异常?我已经阅读过,但似乎每个人都建议增加允许的时间。
原文由 ingh.am 发布,翻译遵循 CC BY-SA 4.0 许可协议
我一直在玩我正在开发的系统并设法让它导致这个:
致命错误:超过 30 秒的最大执行时间
它发生在我做一些不切实际的事情时,但它可能发生在用户身上。
有谁知道是否有办法捕捉这个异常?我已经阅读过,但似乎每个人都建议增加允许的时间。
原文由 ingh.am 发布,翻译遵循 CC BY-SA 4.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 许可协议
2 回答1.2k 阅读✓ 已解决
2 回答751 阅读✓ 已解决
1 回答946 阅读✓ 已解决
1 回答605 阅读✓ 已解决
1 回答462 阅读✓ 已解决
2 回答815 阅读
1 回答816 阅读
您唯一的选择是增加脚本的允许执行时间(将其设置为 0 使其无限,但不建议这样做)或产生一个新线程并希望最好。
无法捕获的原因是它并没有真正被抛出。没有一行代码实际上触发了错误,而是 PHP 说:“不,抱歉,这太长了。现在该关闭了。”这是有道理的。想象一下,在一个设计不佳的程序中,有一个最长执行时间为 30 秒的脚本捕获该错误并再花费 30 秒……这会带来一些相当讨厌的利用机会。至少,它会为 DOS 攻击创造机会。