我有一個使用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」給我的瀏覽器。
綜上所述:通過服務器上的命令行中運行時,它
- 腳本將視頻編碼。
- 腳本將而不是遠程運行時編碼視頻。
- 腳本將在遠程運行時執行。
- WTH?