Итак, у меня есть PHP-скрипт, который использует wget
для загрузки некоторых изображений. Это выглядит примерно так:
exec('wget -O saveImage.png http://location.of.image');
Когда я запускаю свой скрипт на другом компьютере, он работает. Однако, когда я запускаю его локально, он не работает. Я думаю, что это связано с тем, как я установил wget
. Локально я использую Mac OS X 10.6 Snow Leopard и установил wget
с помощью Homebrew . Поэтому, когда я запускаю which wget
(как я), местоположение wget
- /usr/local/bin/wget
(это символическая ссылка на Homebrew Cellar). Я определил, что пользователь, который запускает скрипт, называется daemon
. Я знаю, что скрипт wget
принадлежит группе staff
и я не думаю, что пользователь- daemon
является частью этой группы (но я не знаю, как это проверить). Во всяком случае, я не думаю, что пользователь daemon
имеет разрешение на выполнение команды и / или не может найти скрипт. Что я должен делать?
Обновление: так я смог запустить скрипт, когда указал точное местоположение:
exec('/usr/local/bin/wget ...etc');
Это заставляет меня думать, что это не проблема с разрешениями, а скорее проблема "не удается найти wget". Я не думаю, что могу указать точное местоположение, так как оно отличается на разных машинах, на которых работает этот скрипт. Так что я должен сделать, чтобы обойти эту проблему?
Решение:
Добавив /usr/local/bin
в $PATH
окружения, PHP смог найти wget. Вот как я это сделал в PHP:
//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 ...');