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



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

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

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');

这应该告诉您设置的调用是否正在执行任何操作。如果您在共享主机上,您甚至可能不被允许更改它。

相关内容

  • 没有找到相关文章

最新更新