2

简单地说:

当我通过经典 URL 调用调用 script.php 时,ini_set("max_execution_time")有效

当 script.php 从另一个 php 脚本/进程通过 exec() 函数运行时,ini_set("max_execution_time")不起作用。

现在,我的解决方案不是简单地中继选项 1,因为它可以工作,因为即将激活 script.php 的 exec() 函数和很少有类似的函数是通过(外部)cron 作业调用的。

有谁知道发生了什么?

如果它来自下面的帮助正在激活代码:

exec('/usr/bin/env php ./script.php');
sleep(30);
exec('/usr/bin/env php ./script2.php');

它激活了 script 和 script2.php,当 ini_set() 返回 FALSE 时它们都失败了。

4

4 回答 4

1

正如 Barmar 指出的,有几个用于 php 的 INI 文件。至少一个用于 CGI,一个用于 CLI。您也可以通过 ini_set 或 .htaccess 内部设置一些东西。有一些配置文件定义了哪些设置可以在哪里更改。安静,您可能不允许在 CLI 脚本中修改 max_execution_time。如果我没记错的话,默认情况下它应该是 0 也就是无限制。

于 2013-02-22T21:41:12.510 回答
1

正如Barmar上面所说,两个版本使用不同的 PHP.ini 文件。

CLI 版本是否在安全模式下运行?

在安全模式下使用 ini_set() 可能无法在运行时设置 max_execution_time。此外,CLI 版本的执行时间限制默认为 0。

http://php.net/manual/en/info.configuration.php

于 2013-02-22T21:46:52.110 回答
1

如果您启用它,这可能是xdebug,因为它默认时间为 0(以防止您的脚本在设置断点时超时)。它可能会将其锁定为 0。这对我来说是个问题。

于 2018-08-15T16:21:26.277 回答
0

使用 set_time_limit(seconds) 而不是 ini_set()

于 2013-02-22T21:35:21.433 回答