2016-10-02 5 views
0

У меня есть сервер кодирования видео, созданный на Laravel Forge с nginx. Я пытаюсь запустить тестовый скрипт для удаленного кодирования видео через SSH, используя LaravelCollective SSH package.Запуск PHP удаленно через SSH

Это мой сценарий тестирования (index.php)

<?php 
exec("ffmpeg -I input.mpg -c:v libx264 -preset faster -crf 22 -c:a aac -strict experimental -movflags +faststart -vf scale=360:-1 output.mp4 1> output.txt 2>&1"); 

Когда я SSH на сервер и запустить скрипт из командной строки она работает: видео кодируется; скрипт работает.

$ php /home/forge/mydomainname.com/public/test/index.php 

Однако, когда я запускаю ту же команду локально в моем приложении Laravel - с помощью пакета SSH - это не кодирует и я не получаю никакого вывода; браузер просто возвращает белую страницу.

SSH::run('php /home/forge/mydomainname.com/public/test/index.php', function($line) { 
    echo $line.PHP_EOL; 
}); 

Однако тем не менее, если я открываю index.php, закомментировать команду FFmpeg и добавить некоторый код, чтобы проверить, если exec включен, то будет выполнить и отправить выход, так что я знаю, что пакет SSH на самом деле работает и выполнение сценария удаленно.

<?php 
// exec("ffmpeg -I input.mpg -c:v libx264 -preset faster -crf 22 -c:a aac -strict experimental -movflags +faststart -vf scale=360:-1 output.mp4 1> output.txt 2>&1"); 

if(function_exists('exec')) { 
    echo "exec is enabled"; 
} else { 
    echo "exec is disabled"; 
} 

Он вернет «exec включен» в мой браузер.

Подводя итог:

  1. Сценарий будет кодировать видео при его запуске через командную строку на сервере.
  2. Сценарий не кодирует видео при дистанционном запуске.
  3. Сценарий выполняет при удаленном запуске.
  4. WTH?

ответ

0

Я понял.

В моем приложении Laravel я решил попробовать echo exec('whoami'); и посмотреть, не вернули ли что-нибудь в браузер. Это произошло, поэтому я знал, что работает exec(), и я могу запустить его через SSH-пакет.

Тогда я понял, что моя команда ffmpeg кодирования подавляет вывод с 2>&1. Я удалил это и, наконец, увидел, что происходит: я получал ошибку «файл не найден», что было странно, потому что input.mpg находится в том же каталоге, что и index.php.

Это работало на трех других серверах, но не на этом, созданном с помощью Forge.

Итак, я добавил полный путь к входному файлу и вуаля! Оно работает!

exec("ffmpeg -i /home/forge/mydomainname.com/public/test/input.mpg -c:v libx264 -preset faster -crf 22 -c:a aac -strict experimental -movflags +faststart -vf scale=360:-1 /home/forge/mydomainname.com/public/test/output.mp4 1> /home/forge/mydomainname.com/public/test/output.txt "); 
Смежные вопросы