У меня есть PHP-скрипт, который использует wget
для загрузки некоторых изображений. Однако wget
был установлен с использованием Homebrew, поэтому он недоступен для пользователя, выполняющего скрипт PHP. Когда я запускаю exec('echo $PATH')
я не получаю каталог /usr/local/bin
, содержащий wget
. Как добавить /usr/local/bin
в путь к среде, чтобы скрипт PHP мог найти wget
?
Обновление: я забыл упомянуть причину, по которой я не могу указать точное местоположение, потому что местоположение может быть различным в зависимости от того, на какой машине этот скрипт запускается.
Это то, с чем я столкнулся:
//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 ...');
В порядке предпочтения:
/usr/local/bin/wget
когда вы вызываете подпроцесс. Это, наверное, самый простой и лучший подход. proc_open
вместо exec
, который позволяет передавать переменные окружения в качестве аргумента. putenv
для изменения текущей среды (которая будет наследоваться подпроцессами). PHP имеет волшебную глобальную переменную с именем $_ENV
которая представляет собой массив, содержащий все переменные среды (в контексте процесса, выполняемого скриптом PHP, например, вашего веб-сервера).
см. http://php.net/manual/en/reserved.variables.environment.php