我遇到了一些服务器问题。
使用以下随机脚本仅生成超时。
set_time_limit(1);
$x = 0;
while ($x < 1000)
{
}
我面临的问题是服务器实际上需要大约 10-25 秒左右才能完成脚本并产生致命错误"致命错误:超过最大执行时间 1 秒">
而在我的本地机器上,错误几乎立即出现,我已经在生产服务器上禁用了自定义错误处理程序,因为我认为可能是这样,但我仍然面临同样的问题。
关于可能导致这种情况的原因的任何想法?
编辑
澄清一下,最大执行时间在生产中成功设置,错误消息与本地相同 - "致命错误:超过1秒的最大执行时间">
错误最终出现在生产环境中只需要大约 10-25 秒。
您的生产服务器可能已禁用从 PHP 脚本设置 INI 设置,这是一种很好的做法。 您应该在php_ini脚本中设置此设置,而不是在脚本中使用set_time_limit(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上,休眠的时间是进程"空闲"的时间,因此执行时间被认为是几乎为零。
set_time_limit(1);
echo "Max Execution Time: ".ini_get('max_execution_time');
这应该告诉您设置的调用是否正在执行任何操作。如果您在共享主机上,您甚至可能不被允许更改它。