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

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

WBOY
WBOYOriginal
2016-05-25 16:38:501717Durchsuche

文章提供一款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);
    }
}


本文地址:

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn