PHP取二进制文件头快速判断文件类型的实现代码


Posted in PHP onAugust 05, 2013

一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,PHP扩展中提供了类似 exif_imagetype 这样的函数读取图片类的文件类型,但是很多时候扩展不一定安装了,有时候就需要自己来实现识别文件类型的工作。

下面代码就展示了自己通过读取文件头信息来识别文件的真实类型。

<?php
     $files = array(
        'c:\1.jpg',
        'c:\1.png',
        'c:\1.gif',
        'c:\1.rar',
        'c:\1.zip',
        'c:\1.exe',
    );
    foreach ($files AS $file) {
        $fp = fopen($file, "rb");
        $bin = fread($fp, 2); //只读2字节
        fclose($fp);
        $str_info  = @unpack("C2chars", $bin);
        $type_code = intval($str_info['chars1'].$str_info['chars2']);
        $file_type = '';
        switch ($type_code) {
            case 7790:
                $file_type = 'exe';
                break;
            case 7784:
                $file_type = 'midi';
                break;
            case 8075:
                $file_type = 'zip';
                break;
            case 8297:
                $file_type = 'rar';
                break;
            case 255216:
                $file_type = 'jpg';
                break;
            case 7173:
                $file_type = 'gif';
                break;
            case 6677:
                $file_type = 'bmp';
                break;
            case 13780:
                $file_type = 'png';
                break;
            default:
                $file_type = 'unknown';
                break;
        }        echo $file , ' type: <b>', $file_type, '</b> code:<b>', $type_code, '</b><br />';
    }

本例输出结果
c:\1.jpg type: jpg code:255216
c:\1.png type: png code:13780
c:\1.gif type: gif code:7173
c:\1.rar type: rar code:8297
c:\1.zip type: zip code:8075
c:\1.exe type: exe code:7790
PHP 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
php中$this-&amp;gt;含义分析
Nov 29 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
第二章 PHP入门基础之php代码写法
Dec 30 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
Oct 22 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
PHP自定义多进制的方法
Nov 03 PHP
wordpress网站转移到本地运行测试的方法
Mar 15 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 #PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 #PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 #PHP
php多层数组与对象的转换实例代码
Aug 05 #PHP
注意:php5.4删除了session_unregister函数
Aug 05 #PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 #PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 #PHP
You might like
php4的彩蛋
2006/10/09 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php实现的生成排列算法示例
2019/07/25 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
分家协议书
2014/04/21 职场文书