linux-在PHP CLI中设置max_execution_time

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

但是,有什么方法可以为某些我不想拥有“无限时间”自由并且只想让那些脚本受到控制的脚本显式设置max_execution_time?

如果您认为在superuser.com上可以更好地回答此问题,并有权移动它,请执行此操作。 :)

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

php -d max_execution_time=5 script.php
Radek Simko asked 2020-08-12T00:57:35Z
4个解决方案
36 votes

该文档说,在命令行模式下运行时,默认值为0(无限制)。 它并不表示您不能覆盖它:

set_time_limit(10); // this way
ini_set('max_execution_time', 10); // or this way

编辑:我只是自己尝试过,它可以按预期工作。

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
Jon answered 2020-08-12T00:57:45Z
22 votes

set_time_limit()在CLI脚本中有效。

<?php 
set_time_limit(1); //in seconds
for (;;);
?>

一秒钟后返回并显示以下错误消息:

PHP Fatal error:  Maximum execution time of 1 second exceeded in \
/home/stivlo/test.php on line 4

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

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

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

stivlo answered 2020-08-12T00:58:23Z
1 votes

我有一个类似的问题。 但就我而言,我进行远程数据库调用要花费大量时间,并且我想在一定时间后终止脚本。 如其他答案所述,外部呼叫(或sleep())不会计入配置的超时设置。

因此,我的方法是找出脚本pid,然后在睡眠后后台显示kill -9命令。 这是一个基本示例:

$cmd = "(sleep 10  && kill -9 ".getmypid().") > /dev/null &";
exec($cmd); //issue a command to force kill this process in 10 seconds

$i=0;
while(1){
    echo $i++."\n";
    sleep(1); //simulating a query
}

请注意,您的脚本可能会顺利结束,而另一个新的脚本会使用该kill命令终止的同一个pid启动。 这不太可能,但是如果使用此方法,则应考虑将其作为一种可能性。

Landon answered 2020-08-12T00:58:53Z
0 votes

使用set_time_limit函数。

Timofey Stolbov answered 2020-08-12T00:59:13Z
translate from https://stackoverflow.com:/questions/5874950/set-max-execution-time-in-php-cli