【问题标题】:php set_time_limit, what's the exact behavior?php set_time_limit,确切的行为是什么?
【发布时间】:2016-03-03 16:01:39
【问题描述】:

我正在编写一段 PHP 代码,它在某个时刻运行了一个 foreach 循环,因为我担心它需要太长时间,所以我添加了语句 set_time_limit(20); 作为循环的第一行. (我假设 safe_mode 和 Suhosin 补丁未启用。)

现在,我一直在 http://php.net/manual/en/function.set-time-limit.php 阅读该内容

调用时,set_time_limit() 会从零重新启动超时计数器。换句话说,如果超时是默认的 30 秒,并且在脚本执行后 25 秒调用了 set_time_limit(20) 等调用,则脚本将在超时之前总共运行 45 秒。

但我有点困惑。换句话说,如果循环运行 10 次,并且每个循环将花费 1 秒的时间运行,那么在第 10 个循环结束时,max_execution_time 的值将增加到 20 * (10 - 1) = 180秒加上初始的max_execution_time 值?

【问题讨论】:

  • 否,如果它在循环中,则每次它的值都重写为 20。如果它在循环之外,那么如果你没有应用任何代码来修改它,值也不会改变
  • set_time_limit(X) 基本上是你在说“我愿意再等 X 秒”,当这些 X 秒结束时,就是这样。不管之前的限制是多少。

标签: php execution-time


【解决方案1】:

引用此source

set_time_limit 可用于动态调整脚本允许的最大执行时间。它允许以秒为单位指定时间,并将脚本执行时间限制为该秒数。

无论何时调用 set_time_limit 函数,都会有效地将脚本执行时间延长那么多秒。因此,如果脚本已经运行了 15 秒并且调用了 set_time_limit(30),那么它将运行总共 30+15 = 45 秒。这就是它的设计工作方式。

【讨论】:

    【解决方案2】:

    每次你使用 set_time_limit() 倒计时,直到脚本被杀死/触发 max_execution_time 错误被重置。

    在您的示例中,脚本可能会在最后一个循环后运行 20 秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多