代码如下 | 复制代码 |
/*通过文件名,获得文件类型* *@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); } } |