I have a PHP script that is using wget
to download some images. However, wget
was installed using Homebrew so it’s not available to the user running the PHP script. When I run exec('echo $PATH')
I don’t get the /usr/local/bin
directory that contains wget
. How do I add /usr/local/bin
to the environment path so the PHP script can find wget
?
Update: I forgot to mention the reason I can’t specify the exact location is because the location may be different depending on which machine this script is being run on.
Solution:
This is what I ended up with:
//help PHP find wget since it may be in /usr/local/bin putenv('PATH=' . getenv('PATH') . PATH_SEPARATOR . '/usr/local/bin'); if (exec('which wget') == null) { throw new Exception('Could not find wget, so image could not be downloaded.'); } //now we know wget is available, so download the image exec('wget ...');
Advertisement
Answer
In order of preference:
- You can simply specify the full path
/usr/local/bin/wget
when you are calling the subprocess. This is probably the simplest and best approach. - You can use
proc_open
instead ofexec
, which allows you to pass environment variables as an argument. - You can use
putenv
to change the current environment (which will be inherited by subprocesses).