> 백엔드 개발 > PHP 튜토리얼 > 파일 헤더 정보를 기반으로 파일 유형을 감지하는 PHP 코드

파일 헤더 정보를 기반으로 파일 유형을 감지하는 PHP 코드

WBOY
풀어 주다: 2016-07-25 09:00:40
원래의
1068명이 탐색했습니다.
  1. //파일 유형 감지

  2. function checkFileType($fileName){
  3. $file = fopen($fileName, "rb");
  4. $bin = fread($file, 2); //2바이트만 읽기
  5. fclose($file)
  6. // C는 부호 없는 정수입니다. 인터넷에서 발견되는 모든 것은 부호 있는 정수인 c이며, 이로 인해 비정상적인 음수 판단이 발생합니다.
  7. $strInfo = @unpack("C2chars", $bin)
  8. $typeCode = intval($strInfo[' chars1'].$strInfo['chars2']);
  9. $fileType = ''

  10. 스위치( $typeCode )

  11. {
  12. 케이스 '255216' :
  13. return $typeCode.' : ' .'jpg';
  14. break;
  15. case '7173':
  16. return $typeCode.' : ' .'gif';
  17. break;
  18. 케이스 '13780':
  19. $typeCode.' : ' .'png';
  20. break;
  21. 케이스 '6677':
  22. $typeCode.' : ' .'bmp';
  23. break;
  24. case '7790':
  25. return $typeCode. ' : ' .'exe';
  26. break;
  27. case '7784':
  28. return $typeCode ': ' .'midi';
  29. break;
  30. case '8297':
  31. $typeCode를 반환합니다. ' : ' .'rar';
  32. break;
  33. 기본값:
  34. $typeCode를 반환합니다. . ' : ' .'알 수 없음';
  35. break;
  36. }
  37. //return $typeCode;
  38. }

  39. $file_name = '11.doc ';

  40. echo checkFileType($file_name);
  41. ?>

코드 복사

2.PHP 파일 헤더 정보를 기반으로 파일 형식을 확인하는 클래스입니다.

  1. /*파일 이름을 통해 파일 형식 가져오기*

  2. *$filename="d: / 1.png"; echo cFileTypeCheck::getFileType($filename); 인쇄: png
  3. */
  4. class cFileTypeCheck
  5. {
  6. private static $_TypeList=array();
  7. private static $ CheckClass=null;
  8. 비공개 함수 __construct($filename)
  9. {
  10. self::$_TypeList=$this->getTypeList();
  11. }
  12. /**
  13. *프로세스 파일 형식 매핑 관계 테이블*
  14. *
  15. * @param string $filename 파일 형식
  16. * @return string 파일 형식, 찾을 수 없음 return: other
  17. */
  18. 비공개 함수 _getFileType($filename)
  19. {
  20. $filetype="other";
  21. if(!file_exists($filename)) throw new Exception("파일을 찾을 수 없습니다! " );
  22. $file = @fopen($filename,"rb");
  23. if(!$file) throw new Exception("파일 거부!");
  24. $bin = fread($file , 15); //15바이트만 읽습니다. 파일 유형에 따라 헤더 정보가 다릅니다.
  25. fclose($file);
  26. $typelist=self::$_TypeList;
  27. foreach($typelist를 $v로)
  28. {
  29. $blen=strlen(pack(" H*",$v[0])); //파일 헤더에 표시된 바이트 수를 가져옵니다
  30. $tbin=substr($bin,0,intval($blen)); ///비교 필요 파일 헤더 길이
  31. if(strtolower($v[0])==strtolower(array_shift(unpack("H*",$tbin))))
  32. {
  33. return $v[ 1];
  34. }
  35. }
  36. return $filetype;
  37. }
  38. /**
  39. *파일 헤더 및 파일 형식 매핑 테이블 가져오기*
  40. *
  41. * @return array array(array('key',value)...)
  42. */
  43. 공용 함수 getTypeList()
  44. {
  45. return array(array ("FFD8FFE1","jpg"),
  46. array("89504E47","png"),
  47. array("47494638","gif"),
  48. array("49492A00 ","tif" ),
  49. 배열("424D","bmp"),
  50. 배열("41433130","dwg"),
  51. 배열("38425053","psd"),
  52. 배열(" 7B5C727466","rtf"),
  53. 배열("3C3F786D6C","xml"),
  54. 배열("68746D6C3E","html"),
  55. 배열("44656C69766572792D646174", "eml"),
  56. 배열("CFAD12FEC5FD746F","dbx"),
  57. 배열("2142444E","pst"),
  58. 배열("D0CF11E0","xls/doc"),
  59. 배열(" 5374616E64617264204A","mdb"),
  60. 배열("FF575043","wpd"),
  61. 배열("252150532D41646F6265","eps/ps"),
  62. 배열("255044462D31 2E ","pdf" ),
  63. array("E3828596","pwl"),
  64. array("504B0304","zip"),
  65. array("52617221","rar"),
  66. 배열(" 57415645","wav"),
  67. 배열("41564920","avi"),
  68. 배열("2E7261FD","ram"),
  69. 배열("2E524D46", "rm"),
  70. 배열("000001BA","mpg"),
  71. 배열("000001B3","mpg"),
  72. 배열("6D6F6F76","mov"),
  73. array("3026B2758E66CF11" ,"asf"),
  74. array("4D546864","mid"));
  75. }
  76. 공개 정적 함수 getFileType($filename)
  77. {
  78. if(!self ::$CheckClass) self::$CheckClass=new self($filename);
  79. $class=self::$CheckClass;
  80. return $class->_getFileType($filename);
  81. }
  82. }

  83. $filename="22.jpg";

  84. echo $filename,"t",cFileTypeCheck::getFileType($filename)," rn";
  85. $filename="11.doc";
  86. echo $filename,"t",cFileTypeCheck::getFileType($filename),"rn";

  87. $filename = '22.jpg';
  88. $extname = strtolower(substr($filename, strrpos($filename, '.') 1));
  89. echo $ extname.'< br />';
  90. $file = @fopen($filename, 'rb');
  91. if ($file)
  92. {
  93. $str = @fread($ file, 0x400); // 처음 1024바이트 읽기
  94. echo substr($str, 0, 4);
  95. @fclose($file);
  96. }
  97. if (substr($str, 0, 4 ) == 'MThd' && $extname != 'txt')
  98. {
  99. $format = 'mid';
  100. }
  101. elseif (substr($str, 0, 4) == ' RIFF' && $extname == 'wav')
  102. {
  103. $format = 'wav';
  104. }
  105. elseif (substr($str ,0, 3) == "/ xFF/xD8 /xFF")
  106. {
  107. $format = 'jpg';
  108. }
  109. elseif (substr($str ,0, 4) == 'GIF8' && $extname != ' txt')
  110. {
  111. $format = 'gif';
  112. }
  113. elseif (substr($str ,0, 8) == "/x89/x50/x4E/x47/x0D/x0A /x1A/ x0A")
  114. {
  115. $format = 'png';
  116. }
  117. elseif (substr($str ,0, 2) == 'BM' && $extname != 'txt ')
  118. {
  119. $format = 'bmp';
  120. }
  121. elseif ((substr($str ,0, 3) == 'CWS' || substr($str ,0, 3 ) == 'FWS') && $extname != 'txt')
  122. {
  123. $format = 'swf';
  124. }
  125. elseif (substr($str ,0, 4) == "/xD0 /xCF/x11/xE0")
  126. { // D0CF11E == DOCFILE == Microsoft Office 문서
  127. if (substr($str,0x200,4) == "/xEC/xA5/xC1/ x00" | | $extname == 'doc')
  128. {
  129. $format = 'doc';
  130. }
  131. elseif (substr($str,0x200,2) == "/x09/ x08" | | $extname == 'xls')
  132. {
  133. $format = 'xls';
  134. }elseif (substr($str,0x200,4) == "/xFD/xFF/xFF/xFF" || $extname == 'ppt')
  135. {
  136. $format = 'ppt';
  137. }
  138. } elseif (substr($str ,0, 4) == "PK/x03/x04")
  139. {
  140. $format = 'zip';
  141. } elseif (substr($str ,0, 4) == 'Rar!' && $extname != 'txt')
  142. {
  143. $format = 'rar';
  144. } elseif (substr($str ,0, 4) = = "/x25PDF")
  145. {
  146. $format = 'pdf';
  147. } elseif (substr($str ,0, 3) == "/x30/x82/x0A")
  148. {
  149. $format = 'cert';
  150. } elseif (substr($str ,0, 4) == 'ITSF' && $extname != 'txt')
  151. {
  152. $format = ' chm';
  153. } elseif (substr($str ,0, 4) == "/x2ERMF")
  154. {
  155. $format = 'rm';
  156. } elseif ($extname == ' sql')
  157. {
  158. $format = 'sql';
  159. } elseif ($extname == 'txt')
  160. {
  161. $format = 'txt';
  162. }
  163. echo $format;
  164. ?>

复代码


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿