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 相关文章推荐
php,不用COM,生成excel文件
Oct 09 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
php备份数据库类分享
Apr 14 PHP
php判断用户是否手机访问代码
Jun 08 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
php+laravel依赖注入知识点总结
Nov 04 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
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
python脚本实现查找webshell的方法
2014/07/31 Python
python实现TF-IDF算法解析
2018/01/02 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
贷款承诺书范文
2014/05/19 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
经典导游欢迎词
2015/01/26 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
只用20行Python代码实现屏幕录制功能
2021/06/02 Python