【发布时间】:2010-10-24 06:48:41
【问题描述】:
我正在编写一个 PHP 脚本,它可以将上传的视频文件即时转换为 FLV,但我只希望它在用户在服务器上安装了 FFmpeg 时运行该部分脚本。
有没有办法提前检测到这一点?我可以运行一个 FFmpeg 命令并测试它是否返回“找不到命令”?
【问题讨论】:
标签: php ffmpeg command version
我正在编写一个 PHP 脚本,它可以将上传的视频文件即时转换为 FLV,但我只希望它在用户在服务器上安装了 FFmpeg 时运行该部分脚本。
有没有办法提前检测到这一点?我可以运行一个 FFmpeg 命令并测试它是否返回“找不到命令”?
【问题讨论】:
标签: php ffmpeg command version
试试:
$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()函数的第三个参数是执行程序的返回值。像这样使用它:
exec($cmd, $output, $returnvalue);
if ($returnvalue == 127) {
# not available
}
else {
#available
}
这适用于我的 Ubuntu 机器。
【讨论】:
你回答了你自己的问题,你可以运行命令,如果它返回否定,你就知道它没有安装,或者你可以检查用户为可能的 ffmpeg 二进制文件设置的默认路径。
【讨论】:
ffmpeg --help, 'ffmpeg') > -1) echo 'Installed!';
strpos 不能用作 Javascript 等效项,您必须针对 !== false 进行测试。
嗨,我搜索了这个问题,我可以通过以下代码获取 ffmpeg 的版本: echo(shell_exec('/usr/bin/ffmpeg -version'));
【讨论】:
你可以试试这个:
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
}
也可重复用于其他功能 - 不确定安全问题。
【讨论】: