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中current、next与reset函数用法实例

    php中current、next与reset函数用法实例

    这篇文章主要介绍了php中current、next与reset函数用法,以实例形式详细讲述了PHP中针对数组操作的函数current、next与reset的具体用法,对于深入了解数组的用法具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • php动态生成版权所有信息的方法

    php动态生成版权所有信息的方法

    这篇文章主要介绍了php动态生成版权所有信息的方法,实例分析了php时间与字符串的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP微信模板消息操作示例

    PHP微信模板消息操作示例

    这篇文章主要介绍了PHP微信模板消息操作方法,结合实例形式分析了php模板消息的定义与调用方法,需要的朋友可以参考下
    2017-06-06
  • 解析php中array_merge与array+array的区别

    解析php中array_merge与array+array的区别

    本篇文章是对php中array_merge与array+array的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php程序之die调试法 快速解决错误

    php程序之die调试法 快速解决错误

    经常看到有初入PHP道朋友对于php程序出现问题素手无策的情况
    2009-09-09
  • yum命令安装php7和相关扩展

    yum命令安装php7和相关扩展

    本文给大家简单总结了一下在Linux中使用yum命令安装PHP7和其他相关扩展的方法,有需要的小伙伴可以参考下
    2016-07-07
  • php自动提交表单的方法(基于fsockopen与curl)

    php自动提交表单的方法(基于fsockopen与curl)

    这篇文章主要介绍了php自动提交表单的方法,结合实例形式分析了php基于fsockopen与curl两种实现技巧,需要的朋友可以参考下
    2016-05-05
  • APACHE的AcceptPathInfo指令使用介绍

    APACHE的AcceptPathInfo指令使用介绍

    从APACH2.0.30以上服务器中去掉了acceptpathinfo;如果需要的话需要在http.conf中添加AcceptPathInfo On这一条
    2013-01-01
  • php的dl函数用法实例

    php的dl函数用法实例

    这篇文章主要介绍了php的dl函数用法,以实例形式讲述了利用dl函数突破PHP设置上的限制,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • /etc/php-fpm.d/www.conf 配置注意事项

    /etc/php-fpm.d/www.conf 配置注意事项

    下面小编就为大家带来一篇/etc/php-fpm.d/www.conf 配置注意事项。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论