获取文件的二进制文件头判断其文件类型

<?php
/**
 * 获取文件类型
 *
 * @param string $file 文件路径
 * @return string|bool 文件类型,如果文件不存在或类型不明则返回FALSE
 */
function get_file_type($file) {
    $hash = array(
        6532   => 'txt',
        6677   => 'bmp',
        7173   => 'gif',
        7784   => 'midi',
        7790   => 'exe',
        8075   => 'docx', // xlsx、pptx、zip的代码也是这个
        8297   => 'rar',
        13780  => 'png',
        55122  => '7z',
        208207 => 'doc', // xls、ppt的代码也是这个
        255216 => 'jpg',
    );

    if (!is_file($file)) return FALSE;

    $fopen = fopen($file, 'rb');
    $fread = fread($fopen, 2); // 读取文件的前两个字节
    fclose($fopen);

    $unpack = unpack('C2chars', $fread); // 从二进制字符串对数据进行解包
    $code = intval($unpack['chars1'] . $unpack['chars2']);

    return isset($hash[$code]) ? $hash[$code] : FALSE;
}

Copyright © 2024 码农人生. All Rights Reserved