Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP exec $PATH variable missing elements

When I echo $PATH on my command line, it returns

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/MAMP/Library/bin:/usr/local/git/bin:/usr/X11/bin

When I execute this php code

exec('echo $PATH; whoami; less /etc/paths; 2>&1')

I get

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)

This is on Mac OS X. Can anyone tell me why my last two path elements are missing?

like image 531
Eric Cope Avatar asked Aug 07 '10 00:08

Eric Cope


1 Answers

What does:

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

give you?

It's likely the shell that PHP spawns (probably sh instead of bash) isn't getting the same environment that you have at the command line. You don't say how you're running your exec command.

This will show you which shell is being run:

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

You may need to use the putenv command or determine whether your path needs to be set in /etc/profile, ~/.profile or ~/.bashrc in order for it to be picked up.

like image 73
Dennis Williamson Avatar answered Sep 23 '22 06:09

Dennis Williamson