7

我正在尝试确定某些文件是否实际上是图像(使用 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);

?>
4

3 回答 3

6

大多数文件格式都有一个标题,可以帮助识别它是什么类型的文件。例如,GIF 文件总是以GIF87

幻数数据库是所有标题的列表,并允许finfo()对文件进行标识。

Windows 默认没有安装这个数据库。你需要把它带到窗户上。事实上,无论部署在哪里,都应该使用相同的数据库来提高跨平台兼容性。想象一下,如果您部署到一个不知道您的开发平台可以理解的文件类型的旧系统。

于 2011-05-16T23:15:06.260 回答
1

替代解决方案是查看是否exif_imagetype返回false

于 2011-05-16T23:17:12.337 回答
1

在我的 Ubuntu 上,它位于/usr/share/file/magic.mime. 我不知道Windows。是的,通常各种文件格式都有一个专门用于此目的的前缀(即使没有扩展名,您也可以识别 GIF,例如,它总是以字符串“GIF”开头)。

于 2011-05-16T23:18:32.633 回答