PHP exec $ PATH变量缺少元素

Eri*_*ope 7 php bash path exec environment-variables

当我在命令行上回显$ PATH时,它返回

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/MAMP/Library/bin:/usr/local/git/bin:/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)

当我执行这个PHP代码

exec('echo $PATH; whoami; less /etc/paths; 2>&1')
Run Code Online (Sandbox Code Playgroud)

我明白了

string 'echo $PATH; whoami; less /etc/paths; 2>&1' (length=56)
array
  0 => string '/usr/bin:/bin:/usr/sbin:/sbin' (length=29)
  1 => string 'eric' (length=4)
  2 => string '/usr/bin' (length=8)
  3 => string '/bin' (length=4)
  4 => string '/usr/sbin' (length=9)
  5 => string '/sbin' (length=5)
  6 => string '/usr/local/bin' (length=14)
  7 => string '/Applications/MAMP/Library/bin' (length=30)
  8 => string '/usr/bin:/bin:/usr/sbin:/sbin' (length=29)
Run Code Online (Sandbox Code Playgroud)

这是在Mac OS X上.谁能告诉我为什么我的最后两个路径元素丢失了?

kar*_*m79 12

在致电之前尝试执行此操作exec:

putenv("PATH=" .$_ENV["PATH"]. ':/usr/local/git/bin:/usr/X11/bin');
Run Code Online (Sandbox Code Playgroud)


Pau*_*ce. 6

什么:

php -r 'print getenv("PATH");'
Run Code Online (Sandbox Code Playgroud)

给你?

很可能PHP生成的shell(可能sh代替bash)没有获得与命令行相同的环境.你没有说你是如何运行exec命令的.

这将显示正在运行的shell:

php -r 'echo shell_exec("echo $0");'
Run Code Online (Sandbox Code Playgroud)

您可能需要使用该putenv命令或确定是否需要设置路径/etc/profile,~/.profile或者~/.bashrc是为了拾取它.


Cur*_*bit 2

Mac OS X 上的环境变量是通过不同的机制设置的,具体取决于代码或其父进程的启动方式。为了确保从交互式 shell 启动的项目和 WindowServer 启动的项目具有相同的路径,您需要使 ~/.MacOSX/environment.plist 与 .profile(或 .cshrc)中的设置保持同步。