我有一个专用的盒子(所以我可以编辑所有设置)运行 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.ini
php.ini
- 任何“上一个”(更高)目录中的 .htaccess 中都没有任何内容说明
max_execution_time
或set_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() 将不起作用。