Отсутствие элементов переменной PHP exec $ PATH

Когда я возвращаю $ 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. Может ли кто-нибудь сказать мне, почему мои последние два элемента пути отсутствуют?

Related of "Отсутствие элементов переменной PHP exec $ PATH"

Переменные среды в Mac OS X устанавливаются различными механизмами в зависимости от того, как был запущен ваш код или его родительский процесс. Чтобы гарантировать, что элементы, запущенные из интерактивной оболочки и элементов, запущенных WindowServer, имеют один и тот же путь, вам необходимо синхронизировать ~ / .MacOSX / environment.plist с тем, что установлено в .profile (или .cshrc).

Попробуйте выполнить это до вызова exec :

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

Что значит:

 php -r 'print getenv("PATH");' 

дать вам?

Скорее всего, оболочка, создаваемая PHP (вероятно, sh вместо bash ), не получает ту же среду, что и в командной строке. Вы не говорите, как вы выполняете команду exec .

Это покажет вам, какая оболочка запускается:

 php -r 'echo shell_exec("echo $0");' 

Возможно, вам понадобится использовать команду putenv или определить, должен ли быть установлен ваш путь в /etc/profile , ~/.profile или ~/.bashrc чтобы его можно было подобрать.