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/wgetwhen you are calling the subprocess. This is probably the simplest and best approach. - You can use
proc_openinstead ofexec, which allows you to pass environment variables as an argument. - You can use
putenvto change the current environment (which will be inherited by subprocesses).