你如何设置 PHP 的 CLI 组件的最大执行时间?

cwd*_*cwd 7 php command-line-interface

你如何设置 PHP 的 CLI 组件的最大执行时间?我有一个进入无限循环的 CLI 脚本,我不确定如何在不重新启动的情况下杀死它。我用quicksilver启动它,所以我不能在命令行按control+c。我尝试运行ps -A(显示所有进程)但 php 没有显示在该列表中,所以它可能自己超时了 - 但是你如何手动设置时间限制?

我试图找到有关我应该在哪里设置max_execution_time设置的信息,我习惯于为使用 apache 运行的 PHP 版本设置它,但我不知道在哪里为/usr/bin.

我确实看到了下面的引用,它似乎是准确的(见下面的截图),但具有无限的执行时间似乎不是一个好主意。

请记住,对于 CLI SAPI,max_execution_time 被硬编码为 0。因此它似乎被 ini_set 或 set_time_limit 更改,但实际上并非如此。我发现这个奇怪决定的唯一参考是在 bugtracker(http://bugs.php.net/37306)和 php.ini(对“max_execution_time”指令的评论)中。(通过http://php.net/manual/en/function.set-time-limit.php

ini_set('max_execution_time')没有效果。我也尝试了同样的事情并使用set_time_limit(7).

更新

因此,似乎有三种方法可以实现这一目标:

在脚本中:

设置时间限制(10);// 这边走
ini_set('max_execution_time', 10); // 或者这样

或者在调用脚本时:

php -d max_execution_time=5 script.php

要回答我关于 php.ini 文件将从哪里加载的问题,/etc/php.ini如果它存在,那将是从哪里加载。该文件还需要由运行 php 脚本的用户读取,因此如果它是由 root 创建的并且用户无法“读取”它,这意味着 php 也可能无法“读取”它。

但是,似乎任何 max_execution_time 设置/etc/php.ini实际上都不会影响 CLI 脚本 - 即使文件被正确加载(用于phpinfo()查找) - 因此您必须使用上述其他方法之一。

关于使用睡眠循环来测试这一点,我了解到它不起作用。

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

查看 Stack Overflow 上提出的一个非常相似的问题:https : //stackoverflow.com/questions/5874950/set-max-execution-time-in-php-cli

sym*_*ean 4

在 PHP 代码的顶部,

ini_set('max_execution_time',300);
Run Code Online (Sandbox Code Playgroud)

或者

set_time_limit(300);
Run Code Online (Sandbox Code Playgroud)

你确定它进入循环了吗?如果执行线程已经传递到 PHP 外部的扩展(或其他地方),那么这将不起作用。

更好的解决方案是将脚本包装在看门狗中