アップロードされたビデオ ファイルをオンザフライで 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 ...');
関数の 3 番目のパラメーターexec()
は、実行されたプログラムの戻り値です。次のように使用します。
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
}
他の機能にも再利用可能 - セキュリティ上の懸念はありません。