如何使用自定义php.ini覆盖php cli配置

时间:2014-07-02 00:52:26

标签: php command-line-interface php-ini

我正在努力用我的自定义php.ini覆盖php cli配置

我的自定义php.ini

max_execution_time = 90
memory_limit = 256M
safe_mode = Off

运行php cli

php -c /home/env/php.ini -r 'phpinfo();' | grep 'memory_limit'

输出

memory_limit => 256M => 256M

然而,自定义php.ini似乎没有覆盖max_execution_time和safe_mode,因为它输出0和On而不是90和Off。

运行这个简单的脚本

#!/usr/bin/php -c /home/env/php.ini
<?php echo 'memory_limit: ' . ini_get('memory_limit');

按预期输出默认cli配置(128M)而不是256M。

运行这个简单的脚本

#!/usr/bin/php -d max_execution_time=90
<?php echo 'max_execution_time: ' . ini_get('max_execution_time');

按预期输出90.

到目前为止,我已经设法在运行时只覆盖一个配置指令,因此任何帮助都非常了解如何覆盖多个配置指令。

修改

php -a
php > parse_ini_file('/home/env/php.ini');

输出没有错误,所以我想我的自定义php.ini是好的。我只是发现执行

#!/usr/bin/php -c /home/env/php.ini
<?php echo 'memory_limit: ' . ini_get('memory_limit'); phpinfo();

表示已加载的配置文件=&gt; (没有)。这似乎是个问题。 PHP CLI似乎没有加载我的自定义php.ini文件,即使路径是正确的,语法似乎也很好。

解决方案:

似乎不可能在运行时使用shebang覆盖多个配置指令,至少对我而言。但删除shebang并执行以下命令为我解决了这个问题。

php -d max_execution_time=90 -d memory_limit=256M -d safe_mode=Off -f test.php

2 个答案:

答案 0 :(得分:2)

我也试图通过CLI设置max_execution_time而我无法做到。

documentation我知道它是硬编码的,无法在CLI环境中更改。

无论如何,我发现timeout命令很有用:

timeout 60 php -d memory_limit=1024M script.php

(最多运行脚本60秒)。

答案 1 :(得分:0)

尝试将“safe_mode = Off”行作为自定义文件中的第一行。如果我没记错的话,PHP会按照发生的顺序解析ini文件中的值。

也就是说,如果允许在服务器上执行此操作并且不再依赖该功能,请在每个php.ini中禁用safe_mode。之后,在代码中使用ini_set函数来改变你喜欢的内容,你喜欢多少个变量。我发现脚本本身需要的配置比使用额外的命令行参数或ini文件更好。

Fyi,从PHP 5.4版本中删除了PHP安全模式,因此在旧版本中禁用它是一种很好的做法,可以在升级到更新版本时减少问题。