【问题标题】:No environment variables are available via PHP-fpm+nginx通过 PHP-fpm+nginx 没有可用的环境变量
【发布时间】:2013-11-08 16:39:10
【问题描述】:

我尝试通过以下方式修改php.ini:

variables_order = "GPCSE"
register_globals = On

但所需的PATH 变量既不在$_ENV 中,也不能通过getenv('PATH') 访问。
我在 Ubuntu 10.04 上运行 Nginx + PHP-FPM

注意: 在控制台中执行以下命令会得到正确的结果:

php -r "echo getenv('PATH');"

我猜PATH 是 bash 的环境变量,但只要 php-fpm 不是通过 bash 启动的,它就没有必需的变量。有什么方法可以包含它们?

谢谢。

更新#1: 作为临时解决方案,我发现 PATH 变量存储在“/etc/environment”文件中。所以我只是从那里读它。如果有人需要代码:

preg_match('/^(PATH)="?([^"]+)"?$/i', file_get_contents('/etc/environment'), $match);
putenv($match[1]."=".$match[2]);

【问题讨论】:

  • 你为什么激活register_globals
  • 好吧,我只是想尽办法让它工作。

标签: php nginx environment-variables


【解决方案1】:

默认情况下,PHP-FPM 会清除环境变量(来自 www.conf):

; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
;clear_env = no

您可以取消注释最后一行以将clear_env 设置为no,但如果您愿意,您可以只设置所需的环境变量:

env[PATH] = $PATH

【讨论】:

    【解决方案2】:

    我在将我的 OwnCloud 安装升级到 8.1 版时遇到了这个问题。

    他们在documentation 中描述了一个修复程序

    总结是:在 php5-fpm 配置文件夹中找到您的 www.conf 文件(对于 Ubuntu,这是 /etc/php5/fpm/pool.d/www.conf)并取消注释所需的 env[PATH] 行。

    可选择使用php -r "echo getenv('PATH');" 的输出更新变量的内容

    【讨论】:

      【解决方案3】:

      您可以通过包含路径指定它:http://www.php.net/manual/en/ini.core.php#ini.include-path

      您可以在 php.ini 中指定它(尽管您可能想要一个特定的路径而不是包含所有内容)

      include_path=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/fo‌​ta/开发/adt-bundle-linux-x86_64-20130917/sdk/platform-tools"

      【讨论】:

      • PATH 不是 cwd。我的路径看起来像:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/fota/Development/adt-bundle -linux-x86_64-20130917/sdk/platform-tools
      • 对不起,我弄糊涂了。似乎 PATH 来自 linux,您需要直接访问字符串还是只是包含文件夹的列表?我已经更新了我的答案以适合后者以防万一。
      • 谢谢你的回答,但是PATH变量会不时改变,我不想每次都修改php.ini :(我确定有办法包含bash的环境变量路径。
      猜你喜欢
      • 2018-06-13
      • 2023-03-10
      • 1970-01-01
      • 2021-04-15
      • 2020-03-28
      • 2015-08-30
      • 2014-03-18
      • 2015-06-17
      • 2019-06-11
      相关资源
      最近更新 更多