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伪静态写法附代码
Jun 20 PHP
10条PHP编程习惯助你找工作
Sep 29 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
C#静态方法与非静态方法实例分析
Sep 22 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
laravel实现简单用户权限的示例代码
May 28 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简单系统查询模块代码打包下载
2008/06/07 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
php数组一对一替换实现代码
2012/08/31 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
Python使用Supervisor来管理进程的方法
2015/05/28 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
总结python中pass的作用
2019/02/27 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Python自定义一个异常类的方法
2019/06/27 Python
python按比例随机切分数据的实现
2019/07/11 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
如何理解python中数字列表
2020/05/29 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
python中如何设置代码自动提示
2020/07/15 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
Java面向对象面试题
2016/12/26 面试题
大学生求职推荐信
2013/11/27 职场文书
可可西里观后感
2015/06/08 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
如何利用React实现图片识别App
2022/02/18 Javascript