6

我将如何检查文件是 jpeg、pdf 还是 tiff?我的意思是实际检查,而不仅仅是从 mime 类型和文件扩展名。

我可以访问原始文件数据(此检查是上传程序的一部分),我需要验证这些文件是 jpeg、pdf 还是 tiff。我假设我必须检查文件中的某种标题,但我不知道要查找什么以及从哪里开始。

4

5 回答 5

4

Exif_imagetype 对此非常有用:http ://us2.php.net/manual/en/function.exif-imagetype.php

它扫描文件的初始字节以确定图形类型。它支持大量的图形格式(如果不能识别格式则返回 false)。

于 2013-01-09T15:13:06.343 回答
1

如果您有权访问原始文件,则可以检查文件头的幻数。这个数字定义了文件的类型。

于 2013-01-09T15:13:16.303 回答
1

这可能很棘手,因为所有文件都必须遵循某种具有“神奇数字”的 ISO 标准,这基本上是格式的“标题”。

我发现了这个关于不同签名的维基页面:http ://en.wikipedia.org/wiki/List_of_file_signatures

因此,在最好的情况下,您只需要验证这些第一个字节。

于 2013-01-09T15:13:38.677 回答
1

您需要实现字节序列测试。

是检查最常见图像格式的字节序列的指南。

于 2013-01-09T15:14:54.710 回答
0

要检查图像类型,您可以使用exif_imagetype函数。对于 pdf:您必须打开文件并读取第一个字节并查看它是否以 '%PDF' 开头

$fp = fopen($pdf, 'r');
if(fgets($fp, 4) == '%PDF')
{ 
    ... is pdf
}
fclose($fp);
于 2013-01-09T15:15:21.027 回答