【问题标题】:Read user's environment variable in php script在 php 脚本中读取用户的环境变量
【发布时间】:2015-02-18 14:51:21
【问题描述】:

我正在尝试在 Apache 服务器下运行的 PHP 脚本中查询已设置 .bashrc 文件(我运行的是 Ubuntu 14.04)的环境变量。

当我在访问页面时查询 getenv('MY_VAR_NAME') 或 $_ENV['MY_VAR_NAME'] 时,这些变量似乎丢失了..

我的猜测是:执行脚本时,用户是 www-data,因此无法访问“MY_VAR_NAME”。

是否有针对此类问题的任何程序/最佳实践?

谢谢

【问题讨论】:

  • 你可以设置一个 apache 级别的环境变量,例如SetEnv MY_VAR_NAME value_goes_here 在 .htaccess 或 .conf 文件中。

标签: php apache environment-variables ubuntu-14.04


【解决方案1】:

我的猜测是:执行脚本时,用户是 www-data,因此无法访问“MY_VAR_NAME”。

你的猜测是正确的。 :)

是否有针对此类问题的任何程序/最佳实践?

大多数程序员会做的是拥有一个包含这些变量的配置文件。您可以将配置文件存储在 PHP 脚本可以访问的某个区域——无论是在某个主目录中,还是在 /etc 中。或在其他地方,例如在 web 根目录或其附近的目录中。

不同的框架对配置文件的格式采用不同的方法——有些是 PHP 脚本,有些是 YAML 文件,有些是 windows/DOS 格式的 INI 文件,有些是 XML,有些是 JSON,等等。

我个人喜欢这样做的想法:

  • 仅将访问数据库所需的配置存储在一个简单的 INI 文件中。
  • 将所有剩余配置存储在数据库表中,并为您需要能够编辑的部分构建一个编辑器。
  • 在memcached中缓存配置数据库表的内容。

但是,您使用哪种方法取决于您,并且会根据您的应用程序的需要而有所不同。

【讨论】:

  • 首先感谢您的详细解答!似乎将环境变量添加到“/etc/apache2/envvars”就可以了。您的解决方案似乎有用且可扩展,但对于我需要的东西来说有点开销。您认为将变量添加到 apache/envvars 有任何风险吗?
  • 主要问题是 envvars 文件是服务器范围的,因此如果您在同一台服务器上运行多个站点,这将没有任何好处,因为它们都将具有相同的配置。跨度>
  • 这实际上对我有用,因为这些是与外部服务相关的变量,它们对 Web 服务器上配置的所有站点都有效
  • 在这种情况下,您已经找到了答案。正如我所说的“您使用哪种方法取决于您”。
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 2019-12-12
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多