Intereting Posts
$ _GET, $ _POST и $ _REQUEST не заселены Как документировать методы магии (_call и _callStatic) для IDE Разделить PDF-документы на отдельные страницы с использованием PHP (или, возможно, perl) PHP игнорирует сертификаты ssl при подключении к MySql SOAP PHP разбор ошибок WSDL: не удалось загрузить внешний объект? Предотвращение дублирования данных, вводимых в базу данных mysql Как я могу предотвратить загрузку страницы, если нет javascript, но с использованием php вместо <noscript>? Как передать пустые значения для пароля в yii2? Показать значения из таблицы базы данных MySQL внутри таблицы HTML на веб-странице Как выполнить функцию ajax onbeforeunload? Управлять фатальными ошибками в PHP с помощью register_shutdown_function () Symfony2 – Как остановить Form-> handleRequest от обнуления полей, которые не существуют в данных post Как добавить значения в контроллер Injection Dependency? jQuery.ajax on onbeforeunload не работает Как переопределить существующее количество в корзине?

Добавление в переменную среды $ PATH в скрипте PHP

У меня есть 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 ...'); 

В порядке предпочтения:

  1. Вы можете просто указать полный путь /usr/local/bin/wget когда вы вызываете подпроцесс. Это, наверное, самый простой и лучший подход.
  2. Вы можете использовать proc_open вместо exec , который позволяет передавать переменные окружения в качестве аргумента.
  3. Вы можете использовать putenv для изменения текущей среды (которая будет наследоваться подпроцессами).

PHP имеет волшебную глобальную переменную с именем $_ENV которая представляет собой массив, содержащий все переменные среды (в контексте процесса, выполняемого скриптом PHP, например, вашего веб-сервера).

см. http://php.net/manual/en/reserved.variables.environment.php