【问题标题】:Potential reasons for PHP script not ending after time out specified?PHP脚本在指定超时后未结束的潜在原因?
【发布时间】:2014-04-07 21:56:42
【问题描述】:

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

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

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

}

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

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

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

编辑

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

错误最终出现在生产环境中只需要大约 10-25 秒。

【问题讨论】:

标签: php performance timeout


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    好的,我假设您的生产服务器是 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 程序向 Web 服务发出请求,例如 FileMaker 的自定义 Web 发布,在 Linux 上,PHP 程序等待响应的时间不计算在内,而在 Windows 上,它会计算在内。您可以通过运行脚本来查看:

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

    如果你在 Windows 上运行它,它会失败并显示错误消息,但在 Linux 或 OS X 上,睡眠所花费的时间是进程“空闲”的时间,因此执行时间被认为几乎为零。

    【讨论】:

      【解决方案3】:
      set_time_limit(1);
      echo "Max Execution Time: ".ini_get('max_execution_time');
      

      这应该告诉你你的集合调用是否在做任何事情。如果您使用的是共享主机,您甚至可能无法更改它。

      【讨论】:

      • 嘿,我更新了我的答案,说最大执行时间肯定设置正确,我什至收到消息说由于 1 秒限制而发生了致命错误。还有其他想法吗?
      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多