PHP finfo()从哪里获取文件信息?它与“file -i”输出不匹配

时间:2014-11-05 14:35:47

标签: php mime-types

令人讨厌,我无法使用php finfo()为许多不同的文件获取正确的MIME类型。

这是我的小测试计划:

<? $finfo = new finfo(FILEINFO_MIME);
echo $finfo->file('/mnt/partage/Film/Sintel.2010.1080p.mkv');

它的输出完全错误:

application/octet-stream; charset=binary

此处file -bi /mnt/partage/Film/Sintel.2010.1080p.mkv输出:

video/x-matroska; charset=binary

显然,php finfo()并没有使用正确的魔术文件。但是,没有多少选项:它是/usr/share/file/magic还是/etc/magic.mime,它们都不是来自php。

我在Debian stable(wheezy)上使用backports libmagic运行它。从Apache或命令行调用程序时都会出现问题。

2 个答案:

答案 0 :(得分:2)

Fileinfo使用用PHP编译的data。它不使用libmagic,所以改变你的libmagic对PHP没有影响。唯一的选择是使用较新的PHP版本,或者使用新的数据文件自行编译。

修改:或将$magic_file参数传递给finfo_open,或设置MAGIC环境变量。

答案 1 :(得分:0)

在不同的操作系统上,MIME类型不相似。我担心你不能只依赖MIME类型。我建议检查扩展名或为文件类型添加所有可能的MIME类型。我几周前遇到了同样的问题,我不得不依赖文件的扩展名。

您可以尝试:

$info = pathinfo($file);

echo $info['extension']; //Will be mkv in your case