我遇到了一些服务器问题。
使用以下随机脚本生成超时。
set_time_limit(1);
$x = 0;
while ($x < 1000)
{
}
我面临的问题是服务器实际需要大约10-25秒左右来完成脚本并产生致命错误“致命错误:超过1秒的最大执行时间”
而在我的本地计算机上,错误几乎立即出现,我已经在生产服务器上禁用了自定义错误处理程序,因为我认为可能是这样,但我仍然面临同样的问题。
关于可能导致这种情况的任何想法?
修改
只是为了澄清,最大执行时间是在生产中成功设置,错误信息与本地相同 - “致命错误:超过1秒的最大执行时间”
错误最终会在生产中出现大约10-25秒。
答案 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');
这应该告诉你,你的固定电话是否正在做任何事情。如果您在共享主机上,甚至可能无法更改它。