Как выполнить команду внутри скрипта без указания точного местоположения?

Итак, у меня есть скрипт 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 (который является символической ссылкой на Доморощенный Погреб). Я определил, что пользователь, который запускает скрипт, называется 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 ...');

1 ответ

Решение

Половина ответа...

Убедитесь, что wget находится в переменной окружения PATH по умолчанию для пользователя, с которым вы запускаете скрипт (на каждой машине). Глядя на вывод exec('echo $PATH') может быть хорошим способом сделать это. Результат должен быть как ...:/usr/local/bin:...,

Не знаю, как изменить значение PATH по умолчанию на OSX, хотя.

Другие вопросы по тегам