使用PHP确定文件类型。什么是魔术数据库?

7
我正在尝试使用PHP确定某些文件是否为图像。有人建议我使用finfo,我正试图了解其工作原理。
我不明白的是什么是魔术数字数据库以及它是如何工作的。我有点困惑-每个文件是否都有特定的“魔术数字”与该数据库进行比较?
此外,我可以在Debian Squeeze上使用它,但它也会在WIN平台上提供吗?还是需要将该数据库与应用程序一起附加?
<?php
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic.mgc");
if (!$finfo) {
    echo "Opening fileinfo database failed";
    exit();
}

/* get mime-type for a specific file */
$filename = "/usr/local/something.txt";
echo $finfo->file($filename);

?>

相关:https://dev59.com/X3RB5IYBdhLWcg3w4bAo - barfoon
3个回答

6
大多数文件格式都有一个头部,用于帮助识别文件类型。例如,GIF 文件始终以 GIF87 开头。
魔数数据库是所有头部的列表,并允许 finfo() 识别文件。
Windows 默认没有安装此数据库。您需要将其带到 Windows 上。实际上,无论在哪里部署,都应使用相同的数据库以提高跨平台兼容性。想象一下,如果您部署到一个不知道开发平台了解的文件类型的旧系统上会怎样。

1

另一种解决方案是检查exif_imagetype是否返回false


我想过了,但似乎并不适用于所有图像类型。17? - Stann

1

在我的Ubuntu上,它位于/usr/share/file/magic.mime。我不知道Windows的情况。是的,通常各种文件格式都有一个特定的前缀,就是为了这个目的(即使没有扩展名,你也可以通过它们的前缀来识别GIF格式,例如,它总是以字符串“GIF”开头)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接