Когда я повторяю $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. Кто-либо может сказать мне, почему мои последние два элемента пути отсутствуют?
Что дает:
php -r 'print getenv("PATH");'
Скорее всего, оболочка, которую порождает PHP (возможно, sh
вместо bash
), не получает то же окружение, которое вы имеете в командной строке. Вы не говорите, как вы выполняете команду exec
.
Это покажет, какая оболочка выполняется:
php -r 'echo shell_exec("echo $0");'
Возможно, вам потребуется использовать команду putenv
или определить, нужно ли задать путь в /etc/profile
, ~/.profile
или ~/.bashrc
, чтобы он был подхвачен.
Попробуйте выполнить это перед вызовом exec
:
putenv("PATH=" .$_ENV["PATH"]. ':/usr/local/git/bin:/usr/X11/bin');