文章提供一款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('key',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); } }
本文地址:
转载随意,但请附上文章地址:-)