令人讨厌,我无法使用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或命令行调用程序时都会出现问题。
答案 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