【问题标题】:Setting environment variable in Apache + PHP-FPM在 Apache + PHP-FPM 中设置环境变量
【发布时间】:2023-03-10 16:43:01
【问题描述】:

我在 php-fpm 池配置文件中设置环境变量时遇到了一些问题。

当我在我的/etc/php5/fpm/pool/www.conf 文件中设置env[SOMENAME] = somevalue 时,php 无法获得$_SERVER['SOMENAME'] 的值。我必须在 apache/php 中设置一些配置设置才能从该环境变量中获取值吗?

【问题讨论】:

  • 我认为你是本末倒置。您的问题的标题是关于在 Apache 中设置环境变量并在 PHP-FPM 中查看效果。但您的实际问题似乎是在 php-fpm 中设置环境变量 exclusively。它是哪一个?我要回答标题,因为这是google发现的

标签: php apache


【解决方案1】:

将 Fiete 的答案与 Kufner 的答案合并,你就会得到正确的答案。

在 Apache 的某个地方,您想以某种方式设置环境变量:

SetEnv SOME_VAR "a value"

或重写:

RewriteRule ^ - [E:SOME_VAR="a value"]

您的 PHP 脚本(根据 phpinfo())将在 $_SERVER 数组中为您提供此变量。

【讨论】:

    【解决方案2】:

    您可以在/etc/apache2/envvars 中设置环境变量。 只需在配置文件中添加以下行并重新启动您的 apache。

    export SOMENAME=somevalue
    

    之后,您可以通过 PHP 中的$_SERVER['SOMENAME'] 访问它。

    【讨论】:

      【解决方案3】:

      在 Apache 配置中,您可以使用 SetEnv 指令。而对于 PHP FPM,你做对了。

      但环境变量在$_SERVER 中不可用,它们在$_ENV 变量中。所以你应该在$_ENV['SOMENAME'] 中看到你的somevalue

      【讨论】:

      • 这是错误的。 $_SERVER 是读取环境变量的主要位置。是的,它的名字很糟糕。另请参阅:stackoverflow.com/questions/3780866/why-is-my-env-empty
      • 不,请参阅php.net/manual/en/reserved.variables.environment.php。但是,如果您在 Apache 中将 PHP 作为模块运行,则环境变量会被模拟,并且可能会有所不同。如果您将 PHP 作为 CGI、FPM 或 CLI 运行,那么您将获得 $_ENV$_SERVER 包含比仅环境变量更多的数据,因此您无法确定这些值来自何处。
      • 是的,$_SERVER 包含其他变量,而不仅仅是环境。但是环境总是在那里,不幸的是,$_ENV 并非如此,具体取决于 PHP 配置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 2018-06-13
      • 2016-09-30
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多