2016-10-02 130 views
0

我有一個使用nginx在Laravel Forge上設置的視頻編碼服務器。我試圖運行一個測試腳本,通過SSH遠程編碼視頻,使用LaravelCollective SSH package通過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"); 

當我SSH到服務器並運行它的工作原理命令行腳本:視頻編碼;該腳本正在工作。但是,當我在我的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 is enabled」給我的瀏覽器。

綜上所述:通過服務器上的命令行中運行時,它

  1. 腳本將視頻編碼。
  2. 腳本將而不是遠程運行時編碼視頻。
  3. 腳本將在遠程運行時執行
  4. WTH?

回答

0

我想通了。

從我的Laravel應用程序中,我決定嘗試echo exec('whoami');,看看是否返回任何東西給瀏覽器。它的確如此,所以我知道exec()正在工作,我可以通過SSH軟件包觸發它。

然後我意識到我的ffmpeg編碼命令是用2>&1抑制輸出。我刪除了它,並最終看到發生了什麼:我收到了「找不到文件」錯誤,這很奇怪,因爲input.mpgindex.php位於同一個目錄中。

這對另外三臺服務器起作用,但不是用Forge創建的。

所以我添加了輸入文件的完整路徑和voilà!有用!

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 ");