我将如何检查文件是 jpeg、pdf 还是 tiff?我的意思是实际检查,而不仅仅是从 mime 类型和文件扩展名。
我可以访问原始文件数据(此检查是上传程序的一部分),我需要验证这些文件是 jpeg、pdf 还是 tiff。我假设我必须检查文件中的某种标题,但我不知道要查找什么以及从哪里开始。
Exif_imagetype 对此非常有用:http ://us2.php.net/manual/en/function.exif-imagetype.php
它扫描文件的初始字节以确定图形类型。它支持大量的图形格式(如果不能识别格式则返回 false)。
如果您有权访问原始文件,则可以检查文件头的幻数。这个数字定义了文件的类型。
这可能很棘手,因为所有文件都必须遵循某种具有“神奇数字”的 ISO 标准,这基本上是格式的“标题”。
我发现了这个关于不同签名的维基页面:http ://en.wikipedia.org/wiki/List_of_file_signatures
因此,在最好的情况下,您只需要验证这些第一个字节。
您需要实现字节序列测试。
这是检查最常见图像格式的字节序列的指南。
要检查图像类型,您可以使用exif_imagetype函数。对于 pdf:您必须打开文件并读取第一个字节并查看它是否以 '%PDF' 开头
$fp = fopen($pdf, 'r');
if(fgets($fp, 4) == '%PDF')
{
... is pdf
}
fclose($fp);