在PHP CLI中设置max_execution_time

Rad*_*mko 42 php linux command-line-interface

我知道通常使用PHP CLI是因为没有时间限制和主要因为它没有使用Apache线程/进程.

但有没有办法如何明确设置一些脚本的max_execution_time,我不想拥有"无限时间"的自由,只是想保持这些脚本的控制?

如果你认为这个问题可以在superuser.com上得到更好的解答并且有权移动它,那就去做吧.:)

编辑:我一直在谷歌搜索,找到了正确的参数:

php -d max_execution_time=5 script.php
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 36

文档说,在命令行模式下运行时,默认为0(无限制).它并没有说你不能覆盖它:

set_time_limit(10); // this way
ini_set('max_execution_time', 10); // or this way
Run Code Online (Sandbox Code Playgroud)

编辑:我自己尝试过,它按预期工作.

F:\dev\www>c:php -f index.php
PHP Fatal error:  Maximum execution time of 2 seconds exceeded in F:\dev\www\index.php on line 3

Fatal error: Maximum execution time of 2 seconds exceeded in F:\dev\www\index.php on line 3
Run Code Online (Sandbox Code Playgroud)


sti*_*vlo 22

set_time_limit()在CLI脚本中有效.

<?php 
set_time_limit(1); //in seconds
for (;;);
?>
Run Code Online (Sandbox Code Playgroud)

返回一秒后出现以下错误消息:

PHP Fatal error:  Maximum execution time of 1 second exceeded in \
/home/stivlo/test.php on line 4
Run Code Online (Sandbox Code Playgroud)

最初我尝试使用sleep()并且没有应用时间限制.正如@Jon建议的那样,使用真实的计算,就像无限循环一样.

我在sleep() PHP页面中找到了这个有趣的注释:

注意:set_time_limit()函数和配置指令max_execution_time仅影响脚本本身的执行时间.在确定脚本运行的最长时间时,不会包括执行脚本之外发生的任何活动,例如使用system()的系统调用,sleep()函数,数据库查询等.

  • 你不能用'sleep`来测试它.试试`for(;;);`而不是. (10认同)
  • 即使脚本运行外部命令(睡眠、脚本、查询等),您是否有办法停止它? (2认同)