php检测文件类型,根据文件header信息
文章提供一款php检测文件类型,根据文件header信息,他可以根据用户发布的文件头部信息来确实文件的类型,代码如下:
- <?php
-
-
-
-
-
-
- class cfiletypecheck
- {
- private static $_typelist=array();
- private static $checkclass=null;
- private function __construct($filename)
- {
- self::$_typelist=$this->gettypelist();
- }
-
-
-
-
-
-
- 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);
- 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;
- }
-
-
-
-
-
- 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);
- }
- }
- ?>
|