我试图通过以下方式修改php.ini:
variables_order = "GPCSE"
register_globals = On
但是所需的变量(PATH)既不在$ _ENV数组中,也不能通过getenv('PATH')接受 正如标题所说,我正在运行nginx + php-fpm(Ubuntu 10.04)
P.S。 在控制台中执行下一个comamnd会得到正确的结果: php -r“echo getenv('PATH');”
我猜PATH是bash的环境变量,但只要php-fpm不是通过bash启动它就没有必需的变量。有什么方法可以包括它们吗?
感谢。
UPD#1 作为临时解决方案,我发现PATH变量存储在'/ etc / environment'文件中。所以我只是从那里读它。如果有人需要代码:
preg_match('/^(PATH)="?([^"]+)"?$/i', file_get_contents('/etc/environment'), $match);
putenv($match[1]."=".$match[2]);
答案 0 :(得分:5)
将OwnCloud安装升级到8.1版时,我遇到了这个问题。
中描述了修正摘要是:在php5-fpm配置文件夹中找到您的www.conf
文件(对于Ubuntu,这是/etc/php5/fpm/pool.d/www.conf
)并取消注释所需的env [PATH]行。
(可选)使用php -r "echo getenv('PATH');"
答案 1 :(得分: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 :(得分:0)
您可以通过包含路径指定它: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 /游戏:/家庭/ FO TA /开发/ adt-bundle-linux-x86_64-20130917 / sdk / platform-tools“