当我在命令行上回显$ PATH时,它返回
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/MAMP/Library/bin:/usr/local/git/bin:/usr/X11/bin
当我执行这个PHP代码时
exec('echo $PATH; whoami; less /etc/paths; 2>&1')
我得到了
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)
这是在Mac OS X上。任何人都可以告诉我为什么我的最后两个路径元素丢失了吗?
答案 0 :(得分:11)
在致电exec
之前尝试执行此操作:
putenv("PATH=" .$_ENV["PATH"]. ':/usr/local/git/bin:/usr/X11/bin');
答案 1 :(得分:6)
做什么:
php -r 'print getenv("PATH");'
给你?
很可能PHP生成的shell(可能是sh
而不是bash
)没有获得与命令行相同的环境。您没有说明如何运行exec
命令。
这将显示正在运行的shell:
php -r 'echo shell_exec("echo $0");'
您可能需要使用putenv
命令或确定是否需要在/etc/profile
,~/.profile
或~/.bashrc
设置路径才能获取路径
答案 2 :(得分:2)
Mac OS X上的环境变量由不同的机制设置,具体取决于您的代码或其父进程的启动方式。为了确保从交互式shell启动的项目和WindowServer启动的项目具有相同的路径,您需要将〜/ .MacOSX / environment.plist与.profile(或.cshrc)中设置的内容保持同步。