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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With