使用register_shutdown_function()进行PHP捕获超时

时间:2016-03-16 16:29:53

标签: php error-handling timeout

我正在尝试使用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年被“修复”了。

有没有人遇到同样的问题,希望有解决方案?经过长时间的搜索,没有找到答案。

0 个答案:

没有答案