【问题标题】:How to override php cli configuration with custom php.ini如何使用自定义 php.ini 覆盖 php cli 配置
【发布时间】:2014-07-02 00:52:26
【问题描述】:

我正在努力用我的自定义 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();

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

解决方案:

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

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

【问题讨论】:

  • #!/usr/bin/php -c /home/env/php.ini &lt;?php echo 'memory_limit: ' . ini_get('memory_limit'); 这对我有用!你能仔细检查你的 php.ini (和路径)
  • 如何执行测试文件?例如,您问题底部的那个?
  • @hek2mgl 我的测试文件是这样从控制台执行的:$ ./cli.php
  • 看起来不错。你在 Linux 上工作吗?
  • 是的,linux、nginx 和 php-fpm/fastcgi。我也会尝试使用带有 mod_php 的虚拟机、linux、apache。同样的故事,所以很明显我做错了什么或配置错误。

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


【解决方案1】:

我也尝试通过 CLI 设置 max_execution_time,但我无法做到。

来自documentation 我知道它是硬编码的,不能在 CLI 环境中更改。

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

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

(运行脚本最多 60 秒)。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您提供可能的解决方案。但是,我不再有权访问该特定服务器。但你的回答似乎很合理。
    猜你喜欢
    • 2011-12-12
    • 2012-12-06
    • 2017-02-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多