【问题标题】:PHP $_ENV vs Linux environment (Ubuntu)PHP $_ENV 与 Linux 环境(Ubuntu)
【发布时间】:2013-04-25 23:29:13
【问题描述】:

在我的 PHP 代码中,我试图访问我在 /etc/profile 中导出的 linux 系统环境变量。

当我在终端中键入“printenv”时,我可以看到变量(称为 MEMCACHED_1)已设置。

但我的 PHP 没有看到该变量,它既不在 $_ENV 数组中,我也无法使用 getenv 函数访问它。

在我的 php.ini 文件中,我设置了variables_order = "EGPCS"。这为 $_ENV 添加了很多变量,但 MEMCACHED_1 仍然不存在。

【问题讨论】:

  • 我也会在Superuser 上发布此内容,并且在$_ENV/etc/profile 领域知识方面可能会有交叉,这会有所帮助。
  • 在我的 'buntu 中工作,命令行上的 MEMCACHED_1=foobar php -r'var_dump($_ENV);' | grep -A 1 MEM 产生了什么? `
  • 什么都没有。如果没有“| grep MEM”,它会返回:array(0) { }

标签: php linux


【解决方案1】:

php.ini 到底是什么意思?有/etc/php5/apache2/php.ini(Apache 模块运行的脚本使用的配置)和/etc/php5/cli/php.ini(命令行脚本使用的配置)。后者在 Ubuntu 上将 variables_order = "GPCS" 作为默认设置。

如果您是从命令行运行代码,请尝试更改 /etc/php5/cli/php.ini 并设置 variables_order = "EGPCS"

如果您使用的是 Apache 模块,您可能希望以 $_SERVER 而不是 $_ENV 访问所需的变量,或者按照 cmets 的建议调用 getenv()http://php.net/manual/en/reserved.variables.environment.php

更新

要记住的另一件事:由 Apache 模块启动的 PHP 进程使用用户 www-data(或 Apache 配置中的 User 变量表示的任何内容)运行。因此,您还应该检查printenv 以获取正确的用户:

 sudo su -l www-data -c 'printenv'

-- 这应该有USER=www-data 行或类似的东西(不是root,不是你的登录名)。确保在那里设置了MEMCACHED_1

【讨论】:

  • 我在 Apache 上运行应用程序,并在我的 /etc/php5/apache2/php.ini 中设置 (variables_order = "EGPCS" )
  • <?php var_dump($_ENV);
  • 我的 PHP 在 $_ENV、$_SERVER 或 getenv 中都看不到 MEMCACHED_1 linux 环境变量
  • hudolejev,一大堆东西,但没有 MEMCACHED_1。类似于 printenv 的输出,但不完全相同。例如,MAIL 的值是 /var/mail/root,但是当我执行 printenv 时,MAIL 的值是 /var/mail/MY_USER_NAME
  • hudolejev,但是当我以 SU 身份运行 printenv 时,看起来显示的环境变量是相同的。我想你给了我一个线索
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2012-03-10
  • 2011-04-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
相关资源
最近更新 更多