首页 >php教程 >php手册 >php检测文件类型,根据文件header信息

php检测文件类型,根据文件header信息

WBOY
WBOY原创
2016-05-25 16:38:501727浏览

文章提供一款php检测文件类型,根据文件header信息,他可以根据用户发布的文件头部信息来确实文件的类型,代码如下:

<?php
/*通过文件名,获得文件类型*
 *@author chengmo*
 *@copyright cnblog.com/chengmo 2010-10-17
 *@version 0.1
 *$filename="d:/1.png";echo cfiletypecheck::getfiletype($filename); 打印:png
*/
class cfiletypecheck {
    private static $_typelist = array();
    private static $checkclass = null;
    private function __construct($filename) {
        self::$_typelist = $this->gettypelist();
    }
    /**  
     *处理文件类型映射关系表*
     *
     * @param string $filename 文件类型
     * @return string 文件类型,没有找到返回:other
     */
    private function _getfiletype($filename) {
        $filetype = "other";
        if (!file_exists($filename)) throw new exception("no found file!");
        $file = @fopen($filename, "rb");
        if (!$file) throw new exception("file refuse!");
        $bin = fread($file, 15); //只读15字节 各个不同文件类型,头信息不一样。
        fclose($file);
        $typelist = self::$_typelist;
        foreach ($typelist as $v) {
            $blen = strlen(pack("h*", $v[0])); //得到文件头标记字节数
            $tbin = substr($bin, 0, intval($blen)); ///需要比较文件头长度
            if (strtolower($v[0]) == strtolower(array_shift(unpack("h*", $tbin)))) {
                return $v[1];
            }
        }
        return $filetype;
    }
    /**  
     *得到文件头与文件类型映射表*
     *
     * @return array array(array(&#39;key&#39;,value)...)
     */
    public function gettypelist() {
        return array(
            array(
                "ffd8ffe1",
                "jpg"
            ) ,
            array(
                "89504e47",
                "png"
            ) ,
            array(
                "47494638",
                "gif"
            ) ,
            array(
                "49492a00",
                "tif"
            ) ,
            array(
                "424d",
                "bmp"
            ) ,
            array(
                "41433130",
                "dwg"
            ) ,
            array(
                "38425053",
                "ps教程d"
            ) ,
            array(
                "7b5c727466",
                "rtf"
            ) ,
            array(
                "3c3f786d6c",
                "xml"
            ) ,
            array(
                "68746d6c3e",
                "html"
            ) ,
            array(
                "44656c69766572792d646174",
                "eml"
            ) ,
            array(
                "cfad12fec5fd746f",
                "dbx"
            ) ,
            array(
                "2142444e",
                "pst"
            ) ,
            array(
                "d0cf11e0",
                "xls/doc"
            ) ,
            array(
                "5374616e64617264204a",
                "mdb"
            ) ,
            array(
                "ff575043",
                "wpd"
            ) ,
            array(
                "252150532d41646f6265",
                "eps/ps"
            ) ,
            array(
                "255044462d312e",
                "pdf"
            ) ,
            array(
                "e3828596",
                "pwl"
            ) ,
            array(
                "504b0304",
                "zip"
            ) ,
            array(
                "52617221",
                "rar"
            ) ,
            array(
                "57415645",
                "wav"
            ) ,
            array(
                "41564920",
                "avi"
            ) ,
            array(
                "2e7261fd",
                "ram"
            ) ,
            array(
                "2e524d46",
                "rm"
            ) ,
            array(
                "000001ba",
                "mpg"
            ) ,
            array(
                "000001b3",
                "mpg"
            ) ,
            array(
                "6d6f6f76",
                "mov"
            ) ,
            array(
                "3026b2758e66cf11",
                "asf"
            ) ,
            array(
                "4d546864",
                "mid"
            )
        );
    } 
    public static function getfiletype($filename) {
        if (!self::$checkclass) self::$checkclass = new self($filename);
        $class = self::$checkclass;
        return $class->_getfiletype($filename);
    }
}


本文地址:

转载随意,但请附上文章地址:-)

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn