アップロードしたビデオファイルをその場でFLVに変換するPHPスクリプトを書いていますが、ユーザーがサーバーにFFmpegをインストールしている場合にのみ、スクリプトのその部分を実行したいと思います。
これを事前に検出する方法はありますか?おそらくFFmpegコマンドを実行して、「コマンドが見つかりません」というメッセージが返されるかどうかをテストできますか?
試してください:
$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 ...');
exec()
関数の3番目のパラメーターは、実行されたプログラムの戻り値です。次のように使用します。
exec($cmd, $output, $returnvalue);
if ($returnvalue == 127) {
# not available
}
else {
#available
}
これは私のUbuntuボックスで機能します。
あなたはあなた自身の質問に答えました、あなたはコマンドを実行することができます、そしてそれが否定的に戻ったならあなたはそれがインストールされていないことを知っています、あるいはあなたは可能な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
}
他の機能にも再利用できます-セキュリティ上の懸念はありません。
こんにちは私はこの問題を検索し、次のコードでffmpegのバージョンを取得できます:echo(Shell_exec( '/ usr/bin/ffmpeg -version'));