Исполнительная переменная $PATH PHP недостающие элементы

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

7
задан Eric Cope 7 August 2010 в 00:22
поделиться

2 ответа

Что дает:

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

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

Это покажет, какая оболочка выполняется:

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

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

6
ответ дан 6 December 2019 в 09:17
поделиться

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

putenv("PATH=" .$_ENV["PATH"]. ':/usr/local/git/bin:/usr/X11/bin');
12
ответ дан 6 December 2019 в 09:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: