アップロードされたビデオファイルを即座にFLVに変換するPHPスクリプトを作成していますが、FFmpegがサーバにインストールされている場合にのみスクリプトのその部分を実行します。FFmpegのインストールとバージョンを検出する
これを事前に検出する方法はありますか?おそらく、FFmpegコマンドを実行し、 "コマンドが見つかりません"ということが戻ってくるかどうかをテストできますか?
アップロードされたビデオファイルを即座にFLVに変換するPHPスクリプトを作成していますが、FFmpegがサーバにインストールされている場合にのみスクリプトのその部分を実行します。FFmpegのインストールとバージョンを検出する
これを事前に検出する方法はありますか?おそらく、FFmpegコマンドを実行し、 "コマンドが見つかりません"ということが戻ってくるかどうかをテストできますか?
あなたはあなた自身の質問に答えました。コマンドを実行することができます。ネガティブになった場合は、それがインストールされていないことを知っているか、ffmpegバイナリに対してユーザーが設定したデフォルトのパスを確認できます。
あなたはこれを試してみることができます:
、他の機能のための再利用可能な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
}
- セキュリティ上の問題の特定ではありません。
これはコマンドをチェックするための非常に悪い方法です。インストールされているマニュアルページは、プログラムがインストールされていることを意味するものではなく、その逆もあります。実行可能ファイル自体を確認するだけで十分です。 – viraptor
十分なことに、それは私がそれをテストしたサーバーで心に浮かび、働いた最初のアイデアだった。それがOPのためにもうまくいくかどうかは分かるだろうと思った。 – StudioKraft
exec()
関数の3番目のパラメータは、実行されたプログラムの戻り値です。このように使用してください:
exec($cmd, $output, $returnvalue);
if ($returnvalue == 127) {
# not available
}
else {
#available
}
これは私のUbuntuボックスで動作します。
試してみてください。
$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 ...');
こんにちは私はこの問題を検索し、私はこのコードでffmpegのバージョンを得ることができます: echo(shell_exec( '/ usr/bin/ffmpeg -version'));
ありがとうございました。 PHPでexec()コマンドの返り値を評価する方法を示してください。コマンドが機能しない場合、PHPは賢明にfalseを返しますか?それは私を驚かせるだろう。 – Aaron
サンプル:if(strpos( 'ffmpeg --help'、 'ffmpeg')> -1)echo 'Installed!'; –
@ Cd-MaN:それが**のようなメッセージを出力しない限り、パッケージffmpegはインストールされていません。あなたは... **を実行してインストールできます。また、 'strpos'はJavascriptと同じように動作しませんので、'!== false'に対してテストしなければなりません。 –