[英]SSH Script runs fine manually running it but does not when exec with PHP remotely
[英]Running PHP remotely via SSH
我在Laravel Forge上使用nginx設置了視頻編碼服務器。 我正在嘗試使用LaravelCollective SSH軟件包運行測試腳本以通過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”。
總結一下:
我想到了。
從我的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 ");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.