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

lon*_*nes 6 php command-line-interface php-ini

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

我的自定义php.ini

max_execution_time = 90
memory_limit = 256M
safe_mode = Off
Run Code Online (Sandbox Code Playgroud)

运行php cli

php -c /home/env/php.ini -r 'phpinfo();' | grep 'memory_limit'
Run Code Online (Sandbox Code Playgroud)

输出

memory_limit => 256M => 256M
Run Code Online (Sandbox Code Playgroud)

但是自定义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');
Run Code Online (Sandbox Code Playgroud)

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

运行这个简单的脚本

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

按预期输出90.

到目前为止,我已经设法在运行时只覆盖一个单一的配置指令,所以任何帮助都非常赞赏如何覆盖多个配置指令.

编辑:

php -a
php > parse_ini_file('/home/env/php.ini');
Run Code Online (Sandbox Code Playgroud)

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

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

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

解:

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

php -d max_execution_time=90 -d memory_limit=256M -d safe_mode=Off -f test.php
Run Code Online (Sandbox Code Playgroud)

maa*_*enh 0

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

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

仅供参考,从 PHP 5.4 版开始,PHP 安全模式已被删除,因此在旧版本中禁用它是一个很好的做法,可以在升级到新版本时减少问题。