функция exec не работает в PHP

1

в php exec функция не работает для запуска команды оболочки.

если я буду работать в терминале

   $ avconv -i in.mp4 -f mp3 -ab 192000 -vn rip.mp3 

команда работает нормально, команда предназначена для преобразования видео в mp3. Но когда я пытаюсь выполнить через PHP, это просто не работает.

   exec("avconv -i in.mp4 -f mp3 -ab 192000 -vn rip.mp3");

или если я попробую exec ("whoami"); дает мне правильный результат.

  • 0
    попробуйте использовать passthru () вместо exec () , если не работает, проверьте, есть ли у текущего пользователя (php) права на выполнение avconv и права на запись в папку ...
  • 0
    exec может быть отключен в вашей конфигурации php.ini, вы можете это проверить? если вы используете виртуальный хостинг, его вполне можно отключить из соображений безопасности
Теги:
lamp

2 ответа

0
Лучший ответ

хорошо, это проблема с разрешением файла. У www-data не было разрешения на запись файла после изменения разрешения, которое оно сейчас работает.

2

Скорее всего, вам нужно предоставить команде полный путь к вашим файлам, потому что текущий каталог в PHP не такой, как в вашей оболочке.

exec("avconv -i /path/to/in.mp4 -f mp3 -ab 192000 -vn /path/to/rip.mp3");

Возможно, даже полный путь к aconv должен быть безопасным:

exec("/bin/avconv -i /path/to/in.mp4 -f mp3 -ab 192000 -vn /path/to/rip.mp3");

Проверьте, каков правильный путь для aconv с помощью which aconv.

Чтобы проверить наличие какой-либо ошибки, добавьте второй параметр в команду exec и распечатайте его:

exec('...', $result);
var_dump($result);
  • 0
    о, забыл упомянуть, что файл находится в том же каталоге, и я запускаю его в терминале, меняя каталог
  • 0
    avconv находится в / usr / bin / avconv, я пробовал что-то вроде этого exec ("/ usr / bin / avconv -i in.mp4 -f mp3 -ab 192000 -vn rip.mp3"); или если я запускаю exec ("whoami"); также работает нормально
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню