我正在尝试使用php中的register_shutdown_function()
优雅地捕获脚本中的超时。这是我的代码:
function catchTimeout() {
echo "Caught timeout!";
// Do some logging, error handling here
}
register_shutdown_function("catchTimeout");
set_time_limit(2);
echo "Working...";
$i = 0;
while(1) {
$i++;
}
我希望这个脚本回显“Working ...”,运行两秒钟然后回显“Caught timeout!”。事实并非如此,相反,我看到了致命错误Message: Maximum execution time of 2 seconds exceeded
。错误没有被捕获,我的catchTimeout()没有被执行。
这个论坛帖子(https://bytes.com/topic/php/answers/166258-register_shutdown_function-timeouts)告诉我可以抓住超时,但你只是看不到任何回声,但我也做不了什么。
2002年中期报告了这个错误(https://bugs.php.net/bug.php?id=17461),引用了评论:
REGISTER_SHUTDOWN_FUNCTION()假设在以下任何一种情况发生时启动 - 退出,错误,TIMEOUT或用户中止。 根据Rasmus的说法,这个函数的TIMEOUT功能在Linux下工作正常 - 但是,它在Win32下无法运行!
但是,它在我的Linux机器上不起作用(Apache2,php 5.6.4)。我看到这个错误是在2001年早些时候发布的(https://bugs.php.net/bug.php?id=14542)并且在2003年被“修复”了。
有没有人遇到同样的问题,希望有解决方案?经过长时间的搜索,没有找到答案。