php set_time_limit,确切的行为是什么?

时间:2016-03-03 16:01:40

标签: php execution-time

我正在编写一段PHP代码,该代码在某一点上运行foreach循环,并且由于我担心它需要太长时间,我添加了语句{{1} }作为循环的第一行。 (我假设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个循环结束时,set_time_limit(20);的值将增加到20 *(10 - 1) = 180秒加上初始max_execution_time值?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

引用此source

  

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

     

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