PHP是永远运行脚本,但我有max_execution_time设置为30

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

我有Max_execution_time和max_input_time设置为60以下,重新启动apache(使用apachectl -k优雅),但脚本永远不会超时

我用两个脚本testing了这个(实际上,我首先注意到了'真正'的脚本,可能应该已经超时了,但从来没有这样做过)

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
  • 我已经检查了/etc/php.inimax_execution_timemax_input_time 。 据我所知,没有其他的php.ini
  • 在任何“以前的”(更高的)目录中的.htaccess中没有任何关于max_execution_timeset_time_limit

如前所述,这不仅仅是一个问题,当我使用sleep() – 我注意到,我可以上传和处理数百个文件,而不需要set_time_limit(0)那里。

set_time_limit()函数和configuration指令max_execution_time只影响脚本本身的执行时间。 在确定脚本运行的最长时间时,不包括使用system()系统调用,stream操作,数据库查询等脚本执行之外发生的任何活动时间。 在测量时间是真实的Windows上,这是不正确的。

使用file_get_contents时,您可能正在进行stream操作。

试试:

 while (1) { ;; } 

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