2016-10-02 31 views
0

私は、LARGEL FORGEでnginxを使ってビデオエンコードサーバーを設定しました。私はLaravelCollective SSH packageを使用して、SSH経由でビデオをリモートでエンコードするテストスクリプトを実行しようとしています。SSH経由でリモートで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"); 

です:ビデオがエンコードされています。スクリプトが動作しています。しかし

$ 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 enabled」が返されます。

要約すると:サーバのコマンドラインを介してそれを実行しているとき

  1. スクリプトはビデオをエンコードします。
  2. スクリプトはではありません。は、リモートで実行しているときにビデオをエンコードします。
  3. スクリプトは、リモート実行時にと実行されます。
  4. WTH?

答えて

0

私はそれを理解しました。

Laravelアプリ内から、echo exec('whoami');を試して、ブラウザに何かが返ってきたかどうかを確認することにしました。それがあったので、私はexec()が働いていたと知って、私はSSHパッケージ経由でそれを引き起こすことができました。

次に、私のffmpegエンコードコマンドが2>&1で出力を抑制していることに気付きました。私はそれを削除し、最後に何が起こっているのかを見ました。input.mpgindex.phpと同じディレクトリにあるので、私は「ファイルが見つかりません」というエラーを受け取りました。

これは他の3つのサーバーで動作しましたが、このサーバーでは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 "); 
関連する問題