Home  >  Article  >  Backend Development  >  PHP detects custom classes of file types through file headers

PHP detects custom classes of file types through file headers

WBOY
WBOYOriginal
2016-07-25 08:58:28810browse
  1. /* Get the file type through the file name*
  2. * @author chengmo*
  3. * @version 0.1
  4. * $filename="d:/1.png";echo cFileTypeCheck::getFileType ($filename); Print: png
  5. * edit bbs.it-home.org
  6. */
  7. class cFileTypeCheck
  8. {
  9. private static $_TypeList=array();
  10. private static $CheckClass=null;
  11. private function __construct($ filename)
  12. {
  13. self::$_TypeList=$this->getTypeList();
  14. }
  15. /**
  16. *Processing file type mapping table*
  17. *
  18. * @param string $filename file type
  19. * @return string file type, not found return: other
  20. */
  21. private function _getFileType($filename)
  22. {
  23. $filetype="other";
  24. if(!file_exists($filename)) throw new Exception("no found file!");
  25. $file = @fopen($filename,"rb");
  26. if(!$file) throw new Exception("file refuse !");
  27. $bin = fread($file, 15); //Read only 15 bytes for different file types, and the header information is different.
  28. fclose($file);
  29. $typelist=self::$_TypeList;
  30. foreach ($typelist as $v)
  31. {
  32. $blen=strlen(pack("H*",$v[0])); / /Get the number of bytes marked in the file header
  33. $tbin=substr($bin,0,intval($blen)); ///Need to compare the file header length
  34. if(strtolower($v[0])==strtolower(array_shift) (unpack("H*",$tbin))))
  35. {
  36. return $v[1];
  37. }
  38. }
  39. return $filetype;
  40. }
  41. /**
  42. *Get file header and file type mapping table*
  43. *
  44. * @return array array(array(key,value)...)
  45. */
  46. public function getTypeList()
  47. {
  48. return array(array("FFD8FFE1","jpg"),
  49. array("89504E47","png"),
  50. array("47494638","gif"),
  51. array("49492A00","tif "),
  52. array("424D","bmp"),
  53. array("41433130","dwg"),
  54. array("38425053","psd"),
  55. array("7B5C727466","rtf") ,
  56. array("3C3F786D6C","xml"),
  57. array("68746D6C3E","html"),
  58. array("44656C69766572792D646174","eml"),
  59. array("CFAD12FEC5FD746F","dbx"),
  60. array("2142444E","pst"),
  61. array("D0CF11E0","xls/doc"),
  62. array("5374616E64617264204A","mdb"),
  63. array("FF575043","wpd"),
  64. array("252150532D41646F6265","eps/ps"),
  65. array("255044462D312E","pdf"),
  66. array("E3828596","pwl"),
  67. array("504B0304","zip"),
  68. array("52617221","rar"),
  69. array("57415645","wav"),
  70. array("41564920","avi"),
  71. array("2E7261FD","ram"),
  72. array( "2E524D46","rm"),
  73. array("000001BA","mpg"),
  74. array("000001B3","mpg"),
  75. array("6D6F6F76","mov"),
  76. array("3026B2758E66CF11 ","asf"),
  77. array("4D546864","mid"));
  78. }
  79. public static function getFileType($filename)
  80. {
  81. if(!self::$CheckClass) self::$CheckClass=new self($filename);
  82. $class=self::$CheckClass;
  83. return $class->_getFileType($filename);
  84. }
  85. }
  86. ?>
Copy code


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn