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

如何使用自定义php.ini覆盖php cli配置,php,command-line-interface,php-ini,Php,Command Line Interface,Php Ini,我正在努力用我的定制php.ini覆盖php cli配置 max_execution_time = 90 memory_limit = 256M safe_mode = Off 我的自定义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_li

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

max_execution_time = 90
memory_limit = 256M
safe_mode = Off
我的自定义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_模式,因为它输出0和On,而不是90和Off

运行这个简单的脚本

#!/usr/bin/php -c /home/env/php.ini
<?php echo 'memory_limit: ' . ini_get('memory_limit');
#!/usr/bin/php -d max_execution_time=90
<?php echo 'max_execution_time: ' . ini_get('max_execution_time');
输出没有错误,所以我想我的自定义php.ini是可以的。我想我会发现

#!/usr/bin/php -c /home/env/php.ini
<?php echo 'memory_limit: ' . ini_get('memory_limit'); phpinfo();
尝试将“safe_mode=Off”行作为自定义文件的第一行。如果我没记错的话,PHP会按照出现的顺序解析ini文件中的值

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


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

我也尝试通过CLI设置最大执行时间,但我无法做到这一点

据我所知,它是硬编码的,不能在CLI环境中更改

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

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

(最多运行脚本60秒)。

#/usr/bin/php-c/home/env/php.ini
如何执行测试文件?例如,问题底部的一个?@hek2mgl我的测试文件是这样从控制台执行的:$./cli.phpLooks good。您正在使用Linux?是的,Linux、nginx和php fpm/fastcgi。我还尝试使用虚拟机linux、apache和mod_php。同样的故事,所以很明显我做错了什么或配置错误了什么。谢谢你提供了一个可能的解决方案。但是,我没有访问该特定服务器的权限。但你的回答似乎很合理。
timeout 60 php -d memory_limit=1024M script.php