【问题标题】:PHP script runs much longer than max_execution_time?PHP 脚本运行时间比 max_execution_time 长得多?
【发布时间】:2015-06-18 09:32:07
【问题描述】:

PHP 作为 Apache 模块运行。

脚本以a开头:ini_set('max_execution_time', 300);

它所做的基本上是连接到数据库,执行大型SELECTquery 并循环遍历结果,将它们写入文件并在每次写入后用显式flush(); 回显“结果正常”

没有sleep() 呼叫。

这是一个“测试”脚本,由我的一位同事编写,用于备份目的,旨在运行长达几个小时!我以为我知道脚本执行时间限制,并认为他的脚本会在 300 秒后超时...... 但它没有!

它是从网络浏览器调用的。该页面保持打开状态,我们可以看到实时回显的结果。

为什么不超时? 更奇怪的是,其中一个测试发出了“超过 300 秒的最大执行时间”,但这至少在执行 2 小时后才出现!

这里发生了什么?在 max_execution_time 和 flush() 或保持打开的浏览器窗口之间有什么需要了解的吗?

【问题讨论】:

  • ini_get('max_execution_time') 结果是什么?
  • echo ini_get('max_execution_time'); // 说 300
  • 尝试在php.ini中增加&重启apache

标签: php timeout execution-time


【解决方案1】:

正如您在 set_time_limit 函数的手册页上看到的,here 您设置的总执行时间仅影响实际脚本。数据库查询或任何其他外部调用所花费的时间不计算在内(如果操作系统不是 Windows)

【讨论】:

  • 我认为你和@GOPalmer 是对的,我想我在某处读到数据库查询已考虑到最大执行时间,但事实并非如此。我们确实有运行了很长时间的查询。谢谢
【解决方案2】:

我能想到的唯一可能导致这种情况的是 PHP 是否在安全模式下运行。 ini_get('max_execution_time') 应该告诉你它是否真的被设置了。

编辑:在上面发现了您的评论。

echo ini_get('max_execution_time'); // 说 300

如果报告 300,而您不在 Windows 上,@mishu 可能是对的。您的 SELECT 查询可能需要几个小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多