如果外部呼叫超过时间限制,如何退出脚本

时间:2018-11-09 10:13:13

标签: php bash configuration

PHP有一个名为set_time_limit的方法(以及一个配置选项max_execution_time),该方法可让您指定一个时间限制,该时间限制将在脚本到达时触发退出。但是,这没有考虑外部呼叫的时间。这意味着,例如(如果)PHP脚本进行的数据库调用执行了一些愚蠢的操作并运行了几个小时,则设置的时限将不会触发。

如果我想保证我的PHP脚本的执行时间不会超过特定时间,是否可以通过某些方法来做到这一点?我直接在PHP中运行脚本(而不是通过apache或类似工具),因此我正在考虑编写bash脚本来监视ps并在一段时间后将其杀死。在我看来,我不能成为这个问题的第一人,所以有一些已经建立好的解决方案吗?

注意:这个问题不是关于超出最大执行时间的PHP错误。这是关于PHP超过时间限制而没有触发此错误的情况。这个问题不仅仅是限制PHP脚本的时间,还在于限制PHP脚本进行外部调用的时间。

1 个答案:

答案 0 :(得分:0)

从命令行运行PHP时,默认设置“ max_execution_time”为0。 您可以尝试类似的方法来解决问题。

$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
}