php - PHP-fpm+nginx 没有可用的环境变量

标签 php nginx environment-variables

我尝试通过以下方式修改 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]);

最佳答案

默认情况下,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

关于php - PHP-fpm+nginx 没有可用的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659675/

相关文章:

php - 服务器数据未通过 AJAX 请求在 PhoneGap 框架上传播

node.js - "This site can’ t be reached"using Nginx as reverse proxy for Express Nodejs

node.js - 如何将环境变量设置为 gulp 任务?

python - 如何从本地文件导入环境变量到Django

javascript - 我在用 PHP 制作多文件 uploader 时遇到一些麻烦

php - 使用 PHP while 循环显示多个表中的 MySQL 数据

node.js - 像 php 一样从 nginx 提供 nodejs 应用程序?

perl - 如何确定是从命令行中调用脚本还是将其作为cgi脚本调用?

php - 如何检查数据库中是否存在用户名?

apache - Nginx 为 apache 提供静态内容和代理