指定超时后PHP脚本未结束的潜在原因?

时间:2014-03-05 17:15:28

标签: php performance timeout

我遇到了一些服务器问题。

使用以下随机脚本生成超时。

set_time_limit(1);
$x = 0;
while ($x < 1000)
{

}

我面临的问题是服务器实际需要大约10-25秒左右来完成脚本并产生致命错误“致命错误:超过1秒的最大执行时间”

而在我的本地计算机上,错误几乎立即出现,我已经在生产服务器上禁用了自定义错误处理程序,因为我认为可能是这样,但我仍然面临同样的问题。

关于可能导致这种情况的任何想法?

修改

只是为了澄清,最大执行时间是在生产中成功设置,错误信息与本地相同 - “致命错误:超过1秒的最大执行时间”

错误最终会在生产中出现大约10-25秒。

3 个答案:

答案 0 :(得分:1)

您的生产服务器可能已禁用从PHP脚本设置INI设置,这是一种很好的做法。不要在脚本中使用set_time_limit(1),而应在php_ini中设置它。

答案 1 :(得分:1)

好的,我假设您的生产服务器是Linux / Unix,而您的本地服务器是Windows?他们使用set_time_limit显然不同:

通过以下网址:http://www.soliantconsulting.com/blog/2010/02/phps-max_execution_time-different-on-windows-and-linux

在Windows上,PHP INI变量“max_execution_time”是PHP进程启动和完成之间的最长时间。

在Linux和OS X上,相同的变量表示PHP进程可以占用的最大CPU时间。 CPU时间小于时钟时间,因为Linux(和OS X)上的进程争用CPU时间,有时会闲置。

例如,如果您有一个PHP程序向Linux上的Web服务发出请求,例如FileMaker的Custom Web Publishing,则不会计算PHP程序等待响应的时间,而在Windows上则会计算。您可以通过运行脚本来看到这一点:

<?php
    set_time_limit(15); /* Sets max_execution_time */
    sleep(30); /* Wait thirty seconds */
    echo "Hello World!\n";
?>

如果在Windows上运行它,它将失败并显示错误消息,但在Linux或OS X上,睡眠时间是进程“空闲”的时间,因此执行时间几乎为零。 / p>

答案 2 :(得分:0)

set_time_limit(1);
echo "Max Execution Time: ".ini_get('max_execution_time');

这应该告诉你,你的固定电话是否正在做任何事情。如果您在共享主机上,甚至可能无法更改它。