2010-03-27 3 views
0

Мой скрипт пытается выполнить exec() wget, но, похоже, не работает (хотя ошибка не возникает). В чем может быть проблема? Должен ли я каким-то образом настроить PHP? Я только что установил Apache и PHP на Ubuntu ...Почему wget не работает с функцией exec exec PHP?

+0

Какая командная строка вы передаете exec? –

+0

Я пробовал вот так: exec ('wget -O /var/www/videos/'.$_GET['one''/'.$file.' '. $ One, $ output); а также вот так: exec ('/ usr/bin/wget -O /var/www/videos/'.$_GET['on'].'/'.$file.' '. $ one, $ output); но не удалось. – 2010-03-27 10:27:13

ответ

0

Возможно, wget не находится в пути поиска (поиска) процесса apache/php.
Пробовал ли вы абсолютный путь к исполняемому файлу wget?

0

Ваше имя: $_GET['one']? Имя видеофайла? Число? URL-адрес? Что такое $file? Что '$one?

Очевидные источники ошибок:

  1. ли все эти переменные установлены? Если $ one пуст, то wget некуда будет искать ваш файл. Если $ _GET ['one'] и $ file пустые, то ваш выходной файл, скорее всего, не будет существовать, потому что каталог не найден ($ _GET ['one']) пуст или $ file пуст , в результате чего wget пытается и выводит на имя каталога, что недопустимо.
  2. «незаконные» символы в любой из переменных. $file содержит метасимволы оболочки? Любой;? */\ Etc ...? Все это испортит командную строку.
  3. Почему вы используете wget anyways? Вы передаете исходные параметры запроса в оболочку, которая просто требует неприятностей. Было бы тривиально передавать метасимволы оболочки, которые позволяли бы удаленным пользователям запускать НИЧЕГО на вашем веб-сервере. Рассмотрим следующий запрос:

    http://example.com/fetch.php?one=;%20rm%20-rf%20/%20;

, который в сценарии становится:

wget -O /var/www/videos/; rm -rf/;/$file $one 

и теперь ваш сценарий, к счастью, удаляя все на сервере, который пользователь вашего веб-сервера имеет разрешения для.

Смежные вопросы