php 一直在运行脚本,但我已将 max_execution_time 设置为 30

php 一直在运行脚本,但我已将 max_execution_time 设置为 30

我有一个专用的盒子(所以我可以编辑所有设置)运行 PHP 5.2.16。

我将 Max_execution_time 和 max_input_time 都设置为 60 以下,重新启动了 apache(使用 apachectl -k graceful)但脚本从未超时。

我已经用两个脚本测试了这个问题(实际上,我首先注意到它是用“真实”脚本,可能应该超时但从未超时)

while (1) { sleep(10); }

并且因为显然 sleep() 不会影响 max_execution_time(),所以我尝试了这个:

while(1) { file_get_contents($url); }

($url = 一张大图像。我还回应了一些东西所以我知道它正在运行)

我可以运行脚本超过 10 分钟。

我已检查过的内容:

这样做:

echo ini_get('max_execution_time'); 

回显 60(来自 php.ini)

这样做:

set_time_limit(5); echo ini_get('max_execution_time'); 

回声 5

但在这两种情况下,脚本都会永远运行!

  • 我已经重启了 apache
  • 我已经检查了和max_execution_time。据我所知没有其他的。max_input_time/etc/php.iniphp.ini
  • 任何“上一个”(更高)目录中的 .htaccess 中都没有任何内容说明max_execution_timeset_time_limit

正如所提到的,这不仅仅是我使用时的问题sleep()- 我注意到我可以上传和处理数百个文件而不需要那里set_time_limit(0)

答案1

set_time_limit() 函数和配置指令 max_execution_time 仅影响脚本本身的执行时间。在确定脚本运行的最大时间时,不包括在脚本执行之外发生的任何活动所花费的时间,例如使用 system() 的系统调用、流操作、数据库查询等。在 Windows 上,测量的时间是真实的,因此情况并非如此。

当使用file_get_contents时,您可能会遇到流操作。

尝试:

while (1) { ;; }

答案2

根据PHP 手册如果 safe_mode 为 ON,set_time_limit() 将不起作用。

相关内容