PHP 根据文件头获取文件类型后缀

使用 PHP 脚本在网上下载图片,目标网站使用了缩略图服务,网址里面根本就没有文件的后缀,但是通过浏览器打开是完全正常的,那就只有通过下载完成以后,识别文件的类型,然后再重命名把文件后缀加上。

要识别文件,只能通过文件头来操作,什么是文件头部Bom? 说白了,就是在保存文件的时候,文件前面会多出一串隐藏的字符,文件签名一般都在文件的头部,如果你用十六进制方式查看文件,你就可以看到文件的一些签名信息。如用 uestudio 以十六进制方式查看 zip 格式的文件,其文件内容头部有 50 4B 03 04 这样的十六进制信息。同理 jpg 文件状况有 FF D8 FF E0 xx xx 4A 46 这样的十六进制信息,其实这此十六进制都是表示一些特殊字条。

function checkFileType($fileName){

$file = fopen($fileName, "rb");

$bin = fread($file, 2); // 只读2字节

// C为无符号整数,网上搜到的都是c,为有符号整数,这样会产生负数判断不正常

$strInfo = @unpack("C2chars", $bin);

$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);

$fileType = '';

switch( $typeCode )

{

case '255216':

return 'jpg';

break;

case '7173':

return 'gif';

break;

case '13780':

return 'png';

break;

case '6677':

return 'bmp';

break;

case '7790':

return 'exe';

break;

case '7784':

return 'midi';

break;

case '8297':

return 'rar';

break;

default:

return 'Unknown';

break;

}

}

以上是 PHP 根据文件头获取文件类型后缀 的全部内容, 来源链接: utcz.com/z/264208.html

回到顶部