【问题标题】:Set and check an environment variable设置并检查环境变量
【发布时间】:2019-07-31 09:25:51
【问题描述】:

我正在尝试根据 PHP 是否在 .htaccess 文件中作为 apache 模块运行来设置环境变量。在 php 脚本中转储 $_SERVER 数组我可以看到 MOD_PHP 变量已成功设置,但 reqenv() 条件似乎总是返回 false,因为 ini_get('memory_limit'); 仍然报告默认值。

<IfModule mod_php5.c>
    SetEnv MOD_PHP php5
</IfModule>
<IfModule mod_php7.c>
    SetEnv MOD_PHP php7
</IfModule>
<IfVersion >= 2.4>
    <If "reqenv('MOD_PHP') != '' || reqenv('REDIRECT_MOD_PHP') != ''">
        php_value memory_limit 1024M
    </If>
</IfVersion>

不确定为什么上述方法不起作用。如果我将php_value 移动到&lt;IfVersion&gt; 部分的正下方,则该值将按预期进行修改:

<IfModule mod_php5.c>
    SetEnv MOD_PHP php5
</IfModule>
<IfModule mod_php7.c>
    SetEnv MOD_PHP php7
</IfModule>
<IfVersion >= 2.4>
# the following works
php_value memory_limit 1024M
</IfVersion>

所以它似乎与&lt;If "reqenv()"&gt; 部分有关。

我在安装了 apache 2.4.7 的 ubuntu 14.04 上运行 php 7.2.13。

我还可以补充一点,我将 PHP 作为 apache 模块运行。

【问题讨论】:

  • @manny - 如果您查看上面的内容,您会发现它几乎相同,但仍然无法正常工作,因此在这种情况下链接没有帮助 =)
  • 希望你注意到这一点......这些指令需要与 .user.ini 中的指令同步:我的意思是你是否在 .ini 文件中设置了这个“memory_limit 1024M”?
  • 确实不需要需要与.user.ini文件中的同步,据我所知.user.ini文件只有在@987654334中运行php时才会使用@ 模式,我没有。您还可以在我的问题中看到,如果我直接从 &lt;IfVersion&gt; 部分中设置 php 设置,它确实有效。

标签: php .htaccess environment-variables apache2


【解决方案1】:

SetEnv 发生得很晚,在评估 &lt;if&gt; 之前。

SetEnvIf 发生得更早,在评估 &lt;if&gt; 之前。

如果您想尽早设置每个请求的环境变量以使用&lt;if&gt; 检查它,请使用 SetEnvIf。或者,如果变量根本不是每个请求,则使用真正的环境变量(例如在随 httpd 分发的 envvars 文件中定义)。

【讨论】:

  • 那么我该怎么做才能解决这个问题呢?现在你的回答不是解决方案=)
  • 如果您想尽早设置每个请求的环境变量以使用 进行检查,请使用 SetEnvIf
  • 那么如何在启用模块时使用 SetEnvIf 设置变量?
猜你喜欢
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2014-12-17
  • 2015-07-14
相关资源
最近更新 更多