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

 更新时间:2013年08月05日 09:31:54   作者:  
以下代码就展示了自己通过读取文件头信息来识别文件的真实类型。需要的朋友可以过来参考下
一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,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生成指定范围内的N个不重复的随机数

    PHP生成指定范围内的N个不重复的随机数

    今天小编就为大家分享一篇关于PHP生成指定范围内的N个不重复的随机数,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • php处理json格式数据经典案例总结

    php处理json格式数据经典案例总结

    这篇文章主要介绍了php处理json格式数据的方法,详细讲述了json格式数据的概念与用法,并结合经典案例总结分析了php操作json格式数据的常用技巧,需要的朋友可以参考下
    2016-05-05
  • php设计模式 State (状态模式)

    php设计模式 State (状态模式)

    允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类
    2011-06-06
  • PHP7原生MySQL数据库操作实现代码

    PHP7原生MySQL数据库操作实现代码

    php7已经没有mysql这个扩展了,好多贴还是按照以前的方法讲,让我这个新手来回找了好多遍都没找到mysql,php7用后面两个链接数据库,千万不要傻傻去找也不要去来回拷贝什么dll之类的
    2020-07-07
  • PHP 全角转半角实现代码

    PHP 全角转半角实现代码

    将一个字串中含有全角的数字字符、字母、空格或'%+-()'字符转换为相应半角字符
    2010-05-05
  • coreseek 搜索英文的问题详解

    coreseek 搜索英文的问题详解

    本篇文章是对coreseek搜索英文的问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 如何使用php输出时间格式

    如何使用php输出时间格式

    PHP默认的时区UTC时区,而北京正好位于该时区的东八区,领先UTC时区8个小时,所以在PHP中使用time()函数获取的当前时间总是相差8个小时
    2013-08-08
  • php中在PDO中使用事务(Transaction)

    php中在PDO中使用事务(Transaction)

    事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行
    2011-05-05
  • PHP JSAPI调支付API实现微信支付功能详解

    PHP JSAPI调支付API实现微信支付功能详解

    本人最近做了微信支付开发,是第一次接触,其中走了很多弯路,遇到的问题也很多。为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来以供参考,这篇文章主要介绍了PHP JSAPI调支付API实现微信支付功能
    2022-11-11
  • php的instanceof和判断闭包Closure操作示例

    php的instanceof和判断闭包Closure操作示例

    这篇文章主要介绍了php的instanceof和判断闭包Closure操作,结合实例形式分析了PHP使用instanceof判断类实例以及判断闭包Closure相关操作技巧,需要的朋友可以参考下
    2020-01-01

最新评论