6

我尝试通过以下方式修改 php.ini:

variables_order = "GPCSE"
register_globals = On

但是所需的PATH变量既不能 in$_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]);
4

3 回答 3

8

我在将我的 OwnCloud 安装升级到 8.1 版时遇到了这个问题。

他们在文档中描述了一个修复

摘要是:www.conf在 php5-fpm 配置文件夹中找到您的文件(对于 Ubuntu,这是/etc/php5/fpm/pool.d/www.conf)并取消注释所需的 env[PATH] 行。

可选地使用输出更新变量的内容php -r "echo getenv('PATH');"

于 2015-07-08T13:13:10.400 回答
5

默认情况下,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_envno,但如果您愿意,您可以只设置所需的环境变量:

env[PATH] = $PATH
于 2020-01-18T13:58:28.860 回答
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/games:/home/fo‌​ta/Development/adt -bundle-linux-x86_64-20130917/sdk/platform-tools "

于 2013-10-29T14:01:59.020 回答