2016-10-02 7 views
0

나는 Lginvel Forge에서 nginx로 설정된 비디오 인코딩 서버를 가지고 있습니다. 나는 LaravelCollective SSH package을 사용하여 SSH를 통해 원격으로 비디오를 인코딩하기위한 테스트 스크립트를 실행하려고합니다. 내가 서버에 SSH 및 작동 명령 줄에서 스크립트를 실행하면SSH를 통해 원격으로 PHP 실행

이 내 테스트 스크립트 (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"); 

입니다 : 비디오 인코딩됩니다; 스크립트가 작동 중입니다. 그러나

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

, 내 Laravel 응용 프로그램에 로컬로 같은 명령을 실행할 때 - SSH를 패키지를 사용하여 - 그것은 인코딩하지 않고 내가 어떤 출력을받을 수 없습니다; 브라우저는 그냥 흰색 페이지를 반환합니다. 내가 index.php을 열 경우

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

그러나 그러나는 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 is enabled"가 반환됩니다.

요약하면 : 서버의 명령 줄을 통해 그것을 실행할 때

  1. 스크립트는 비디오를 인코딩합니다.
  2. 스크립트는 이 아니며은 원격으로 실행할 때 비디오를 인코딩합니다.
  3. 스크립트 이 원격으로 실행될 때 실행됩니다.
  4. WTH?

답변

0

알아 냈습니다.

내 Laravel 앱 내에서 echo exec('whoami');을 시도해보고 브라우저에 아무 것도 반환하지 않는지 확인했습니다. 그랬기 때문에 exec()이 작동하고 있었고 SSH 패키지를 통해 트리거 할 수 있음을 알았습니다.

그런 다음 ffmpeg 인코딩 명령이 2>&1의 출력을 억제하고 있음을 알았습니다. 나는 그것을 제거하고 마지막으로 무슨 일이 일어 났는지 보았다. 나는 input.mpgindex.php과 같은 디렉토리에 있기 때문에 "파일을 찾을 수 없다"라는 오류가 발생했다.

이 서버는 3 개의 다른 서버에서 작동하지만이 서버에서는 작동하지 않습니다.

그래서 입력 파일의 전체 경로를 추가했습니다. 그것은 작동합니다!

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 "); 
관련 문제