我只想让我的 apache 注册一些我的预定义环境,以便我可以使用 php 中的 getenv 函数检索它。我怎样才能做到这一点?我尝试使用 root 添加 /etc/profile.d/foo.sh 和 export FOO=/bar/baz 并重新启动 apache。
4 回答
环境变量由 Unix 中的进程继承。/etc/profile.d 中的文件仅在您登录时执行(在当前 shell 中,而不是在子 shell 中)。仅更改那里的值然后重新启动进程不会更新环境。
可能的修复:
- 注销/登录,然后启动 apache
- 源文件:
# . /etc/profile.d/foo.sh
,然后重新启动apache - 在 apache 初始化脚本中获取文件
您还需要确保它/etc/profile.d/
是由 Apache 启动init
而不是您自己启动的。
最好的修复可能还取决于您使用的发行版,因为它们使用不同的配置方案。
您可以在配置文件(/etc/httpd/conf.d/*.conf、.htaccess ...)中使用SetEnv 。此外,您应该能够在 /etc/sysconfig/httpd 中定义它们(在基于 RPM 的发行版上)并导出它们(注意:未经测试)。
注意:如果某些发行版试图尽可能多地隐藏系统配置,这不会让我感到惊讶,就系统配置而言,可以从公开访问的服务(例如 Apache)中隐藏。如果他们不这样做,他们可能会在未来的版本中开始这样做。因此,我建议您明确地执行此操作。如果您需要在 Apache 和您的 shell 之间共享这样的设置,您可以尝试从/etc/sysconfig/httpd获取/etc/profile.d/yourprofile.sh
Apache 配置文件允许您基于每个站点设置环境变量。
因此,如果您的 Web 服务器正在为来自两个逻辑站点的页面提供服务,您可以为每个站点设置不同的相同环境变量,从而让您的 PHP 做出不同的反应。
有关详细信息,请参阅Apache mod_env:
如果您只需要 Apache 的环境变量,那么对我有用的是编辑/etc/apache2/envvars
和重新启动 Apache。我添加了这些设置:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'