Karp 的技术博客

最简单的方法就是判断文件后缀名,但是问题是如果修改了文件后缀名呢?
那么现在从外部文件名的后缀无法判断文件的格式,那么就从内部查找;
不同格式的文件结构 中都会有规定的标识,也是一种文件结构协议!

  1. 每个二进制文件的头两个字节作为文件标识;
  2. 每个二进制文件中都存在不同的标识符(具体未统计);
    //从文件内部判断类型 取每个文件的前两个字节
    $filename = "./1.png";
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    // unpack() 函数从二进制字符串对数据进行解包。
    $strInfo = @unpack("C2", $bin);
    $typeCode = "$strInfo[1]"."$strInfo[2]";
    $fileType = '';
    switch ($typeCode)
    {
        case 7790:
            $fileType = 'exe';
            break;
        case 7784:
            $fileType = 'midi';
            break;
        case 8297:
            $fileType = 'rar';
            break;
        case 255216:
            $fileType = 'jpg';
            break;
        case 7173:
            $fileType = 'gif';
            break;
        case 6677:
            $fileType = 'bmp';
            break;
        case 13780:
            $fileType = 'png';
            break;
        default:
            echo 'unknown';
    }
    echo 'this is a(an) '.$fileType.' file:'.$typeCode;

    EXIT;

php

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2016年03月07日 02:10
5

目录

来自 《PHP 判断二进制文件的格式》