我正在尝试确定某些文件是否实际是图像(使用PHP)。 我被建议使用finfo,我试图了解它是如何工作的。
我没有得到的是 - 什么是魔术数字数据库以及它是如何工作的?我有点疑惑 - 每个文件都有一些与你的数据库进行比较的“神奇数字”吗?
另外 - 我的debian挤压它 - 但是它也可以在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);
?>
答案 0 :(得分:6)
大多数文件格式都有一个标题,可帮助识别它是什么类型的文件。例如,GIF文件始终以GIF87
幻数号数据库是所有标题的列表,允许finfo()
标识文件。
默认情况下,Windows没有安装此数据库。你需要把它带到窗户。事实上,无论您在何处部署,都应使用相同的数据库,以提高跨平台兼容性。想象一下,如果您部署到一个不了解您的开发平台能够理解的文件类型的旧系统。
答案 1 :(得分:1)
另一种解决方案是查看exif_imagetype
是否返回false
吗?
答案 2 :(得分:1)
在我的Ubuntu上,它位于/usr/share/file/magic.mime
。关于Windows,我不知道。是的,通常各种文件格式都有一个特定的前缀只是为了这个目的(即使没有扩展名,你可以识别一个GIF,例如,它始终以字符串“GIF”开头)。