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 相关文章推荐
用文本作数据处理
Oct 09 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
sql注入与转义的php函数代码
Jun 17 PHP
php使用递归计算文件夹大小
Dec 24 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
递归实现php数组转xml的代码分享
May 14 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
php 多继承的几种常见实现方法示例
Nov 18 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
帅气的琦玉老师
2020/03/02 日漫
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
让你成为更出色的PHP开发者的10个技巧
2011/02/25 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
slice函数的用法 之不错的应用
2006/12/29 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
python使用pil生成缩略图的方法
2015/03/26 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python去除文件中重复的行实例
2018/06/29 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
区域总监的岗位职责
2013/11/21 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
白血病捐款倡议书
2014/05/14 职场文书
会计学专业求职信
2014/07/17 职场文书
实习单位推荐信
2015/03/27 职场文书
经典祝酒词大全
2015/08/12 职场文书