当我们通过PHP对一个文件进行处理的时候,有时候我们需要判断该文件的格式,从而进一步进行处理。在PHP中,我们可以通过文件头来判断文件的格式。
文件头,也称为魔数(Magic Number),是一个文件开头的特定几个字节,常用来标识文件类型。每种文件类型都有自己的魔数,根据不同的魔数来判断文件的类型,可以防止拓展名被篡改的情况下被误判。
判断文件类型的方法:
- 我们可以使用PHP内置的finfo函数来判断文件类型,具体示例代码如下:
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, 'test.png');
echo 'Mime Type: '. $mime_type;
?>
上面的代码会输出该文件的MIME类型,这种方法一般是最准确的。但是这个函数需要服务器安装fileinfo扩展。
- 我们可以通过读取文件头来判断文件类型,具体示例代码如下:
<?php
$filename = 'test.png';
$fp = fopen($filename,'r');
$bin = fread($fp,2); //读取文件头2字节
fclose($fp);
$str_info = @unpack("C2chars", $bin);
$filetype = '';
$info = '';
//获取文件类型
foreach ($str_info as $num)
{
$filetype .= dechex($num);
}
$filetypes = array(
'ffd8' => 'jpg',
'8950' => 'png',
'4749' => 'gif',
);
if (array_key_exists($filetype, $filetypes)) {
$info .= $filetypes[$filetype];
}
echo 'File Type: '. $info;
?>
上面的代码会输出该文件的文件类型,其中数组$filetypes为常见的文件类型对应的文件头,可以根据自己的需要添加。
总结:上面的两种方法都可以通过文件头来判断文件类型。具体使用哪种方法,可以根据自己的实际情况来选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php通过文件头判断格式的方法 - Python技术站