2009-05-06 9 views
10

アップロードされたビデオファイルを即座にFLVに変換するPHPスクリプトを作成していますが、FFmpegがサーバにインストールされている場合にのみスクリプトのその部分を実行します。FFmpegのインストールとバージョンを検出する

これを事前に検出する方法はありますか?おそらく、FFmpegコマンドを実行し、 "コマンドが見つかりません"ということが戻ってくるかどうかをテストできますか?

答えて

3

あなたはあなた自身の質問に答えました。コマンドを実行することができます。ネガティブになった場合は、それがインストールされていないことを知っているか、ffmpegバイナリに対してユーザーが設定したデフォルトのパスを確認できます。

+0

ありがとうございました。 PHPでexec()コマンドの返り値を評価する方法を示してください。コマンドが機能しない場合、PHPは賢明にfalseを返しますか?それは私を驚かせるだろう。 – Aaron

+3

サンプル:if(strpos( 'ffmpeg --help'、 'ffmpeg')> -1)echo 'Installed!'; –

+0

@ Cd-MaN:それが**のようなメッセージを出力しない限り、パッケージffmpegはインストールされていません。あなたは... **を実行してインストールできます。また、 'strpos'はJavascriptと同じように動作しませんので、'!== false'に対してテストしなければなりません。 –

0

あなたはこれを試してみることができます:

、他の機能のための再利用可能な
function commandExists($command) { 
    $command = escapeshellarg($command); 
    $exists = exec("man ".$command,$out); 
    return sizeof($out); 
} 

if (commandExists("ffmpeg")>0) { 
    // FFMPeg Exists on server 
} else { 
    // No FFMPeg 
} 

- セキュリティ上の問題の特定ではありません。

+1

これはコマンドをチェックするための非常に悪い方法です。インストールされているマニュアルページは、プログラムがインストールされていることを意味するものではなく、その逆もあります。実行可能ファイル自体を確認するだけで十分です。 – viraptor

+1

十分なことに、それは私がそれをテストしたサーバーで心に浮かび、働いた最初のアイデアだった。それがOPのためにもうまくいくかどうかは分かるだろうと思った。 – StudioKraft

6

exec()関数の3番目のパラメータは、実行されたプログラムの戻り値です。このように使用してください:

exec($cmd, $output, $returnvalue); 
if ($returnvalue == 127) { 
    # not available 
} 
else { 
    #available 
} 

これは私のUbuntuボックスで動作します。

9

試してみてください。

$ffmpeg = trim(shell_exec('which ffmpeg')); // or better yet: 
$ffmpeg = trim(shell_exec('type -P ffmpeg')); 

それが戻ってきた場合は、空のffmpegのは、そうでない場合、それはあなたが実際のffmpegのコールで使用することができ、実行可能、絶対パスを保持します、使用できません。

if (empty($ffmpeg)) 
{ 
    die('ffmpeg not available'); 
} 

shell_exec($ffmpeg . ' -i ...'); 
0

こんにちは私はこの問題を検索し、私はこのコードでffmpegのバージョンを得ることができます: echo(shell_exec( '/ usr/bin/ffmpeg -version'));