Home > Backend Development > PHP Tutorial > PHP code to verify file type based on file header

PHP code to verify file type based on file header

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-07-25 09:00:44
Original
1677 people have browsed it
  1. /**
  2. * Verification file type class
  3. *
  4. * @author Silver
  5. * by bbs.it-home.org
  6. */
  7. class FileTypeValidation
  8. {
  9. // File type, different header information
  10. private static $_fileFormats = Array(
  11. 'jp2' => '0000000C6A502020 ',
    '3gp' => '0000002066747970',
  12. '3gp5' => '0000001866747970',
  13. 'm4a' => '00000020667479704D3441',
  14. 'ico' =&g t; '00000100' ,
  15. 'spl' => '00000100',
  16. 'vob' => '000001BA',
  17. 'cur' => '00000200',
  18. 'wb2' => '00000200',
  19. 'wk1' = > '0000020006040600',
  20. 'wk3' => '00001A0000100400',
  21. 'wk4' => '00001A0002100400',
  22. 'wk5' => '00001A0002100400',
  23. '123' => '00001A00051004',
  24. 'qxd' => '00004D4D585052',
  25. 'mdf' => '010F0000',
  26. 'tr1' => '0110',
  27. 'rgb' => '01DA01010003',
  28. 'drw' => '07',
  29. 'dss' => '02647373',
  30. 'dat' => 'A90D000000000000',
  31. 'db3' => '03',
  32. 'qph' => '03000000',
  33. 'adx' => '80000020031204',
  34. 'db4' => '04',
  35. 'n' => 'FFFE0000',
  36. 'a' => 'FFFE0000',
  37. 'skf' => '07534B46',
  38. 'dtd' => '0764743264647464',
  39. 'db' => 'D0CF11E0A1B11AE1',
  40. 'pcx' => '0A050101',
  41. 'mp' => '0CED',
  42. ' doc' => 'D0CF11E0A1B11AE1',
  43. 'nri' => '0E4E65726F49534F',
  44. 'wks' => 'FF00020004040554',
  45. 'pf' => '1100000053434341',
  46. 'ntf' => ' 4E49544630',
  47. 'nsf' => '4E45534D1A01',
  48. 'arc' => '41724301',
  49. 'pak' => '5041434B',
  50. 'eth' => '1A350100',
  51. 'mkv ' => '1A45DFA393428288',
  52. 'ws' => '1D7D',
  53. 'gz' => '1F8B08',
  54. 'tar.z' => '1FA0',
  55. 'ain' => '2112',
  56. 'lib' => '213C617263683E0A',
  57. 'msi' => 'D0CF11E0A1B11AE1',
  58. 'vmdk' => '4B444D',
  59. 'dsp' => '23204D6963726F73' ,
  60. ' amr' => '2321414D52',
  61. 'hdr' => '49536328',
  62. 'sav' => 25504446',
  63. 'fdf' => '25504446',
  64. 'hqx' => '2854686973206669',
  65. 'log' => '2A2A2A2020496E73',
  66. 'ivr' => '2E524543' ,
  67. 'rm ' => '2E524D46',
  68. 'rmvb' => '2E524D46',
  69. 'ra' => '2E7261FD00',
  70. 'au' => '646E732E',
  71. 'cat' => '30 ',
  72. 'evt' => '300000004C664C65',
  73. 'asf' => '3026B2758E66CF11',
  74. 'wma' => '3026B2758E66CF11',
  75. 'wmv' => '3026B2758E66 CF11',
  76. 'wri' => 'BE000000AB',
  77. '7z' => '377ABCAF271C',
  78. 'psd' => '38425053',
  79. 'sle' => '414376',
  80. 'asx' => '3C' ,
  81. 'xdr' => '3C',
  82. 'dci' => '3C21646F63747970',
  83. 'manifest' => '3C3F786D6C2076657273696F6E3D',
  84. 'xml' => '3C3F786D6C20 76657273696F6E3D22312E30223F3E',
  85. 'msc' = > 'D0CF11E0A1B11AE1',
  86. 'fm' => '3C4D616B65724669',
  87. 'mif' => '56657273696F6E20',
  88. 'gid' => '4C4E0200',
  89. 'hlp' => ' 4C4E0200',
  90. 'dwg' => '41433130',
  91. 'syw' => '414D594F',
  92. 'abi' => '414F4C494E444558',
  93. 'aby' => '414F4C4442',
  94. 'bag' => ; '414F4C2046656564',
  95. 'idx' => '5000000020000000',
  96. 'ind' => '414F4C494458',
  97. 'pfc' => '414F4C564D313030',
  98. 'org' => ; '414F4C564D313030',
  99. 'vcf' => '424547494E3A5643',
  100. 'bin' => '424C4932323351',
  101. 'bmp' => '424D',
  102. 'dib' => '424D',
  103. 'prc' => '424F4F4B4D4F4249',
  104. 'bz2' => '425A68',
  105. 'tar.bz2' => '425A68',
  106. 'tbz2' => '425A68',
  107. 'tb2' => '425A68',
  108. 'rtd' => '43232B44A4434DA5',
  109. 'cbd' => '434246494C45',
  110. 'iso' => '4344303031',
  111. 'clb' => '434F4D2B',
  112. 'cpt' => ; '43505446494C45',
  113. 'cru' => '43525553482076',
  114. 'swf' => '465753',
  115. 'ctf' => '436174616C6F6720',
  116. 'dms' => '444D532 1',
  117. 'adf' => '5245564E554D3A2C',
  118. 'dvr' => '445644',
  119. 'ifo' => '445644',
  120. 'cdr' => '52494646',
  121. 'vcd' => '454E545259564344',
  122. 'mdi' => '4550',
  123. 'e01' => '4C5646090D0AFF00',
  124. 'evtx' => '456C6646696C6500',
  125. 'qbb' => '45860 0000600',
  126. ' cpe' => '464158434F564552',
  127. 'flv' => '464C56',
  128. 'aiff' => '464F524D00',
  129. 'eml' => '582D',
  130. 'gif' => ' 47494638',
  131. 'pat' => '47504154',
  132. 'gx2' => '475832',
  133. 'sh3' => '4848474231',
  134. 'tif' => '4D4D002B',
  135. 'tiff '= & gt;' 4d4d002b ',
  136. 'mp3' = & gt; '494433',
  137. 'koz '= & gt;' 4944330000000 ',
  138. 'crw' = & gt; = & gt; '4D534346 ',
  139. 'lit' => '49544F4C49544C53',
  140. 'chi' => '49545346',
  141. 'chm' => '49545346',
  142. 'jar' => '5F27A889',
  143. 'jg' => '4A47040E000000',
  144. 'kgb' => '4B47425F61726368',
  145. 'shd' => '68490000',
  146. 'lnk' => '4C00000001140200',
  147. 'obj' => '80',
  148. 'pdb' => 'ACED000573720012',
  149. 'mar' => '4D41723000',
  150. 'dmp' => '504147454455',
  151. 'hdmp' => '4D444D5093A7',
  152. 'mls' => '4D563243',
  153. 'mmf' => '4D4D4D440000',
  154. 'nvram' => '4D52564E',
  155. 'ppz' => '4D534346',
  156. 'snp' => '4D534346',
  157. 'tlb' => '4D53465402000100',
  158. 'dvf' => '4D535F564F494345',
  159. 'msv' => '4D535F564F494345',
  160. 'mid' => '4D546864',
  161. 'midi' => '4D546864',
  162. 'dsn' => '4D56',
  163. 'com' => 'EB',
  164. 'dll' => '4D5A',
  165. 'drv' => '4D5A',
  166. 'exe' => '4D5A',
  167. 'pif' => '4D5A',
  168. 'qts' => '4D5A',
  169. 'qtx' => '4D5A',
  170. 'sys' => 'FFFFFFFF',
  171. 'acm' => '4D5A',
  172. 'ax' => '4D5A900003000000',
  173. 'cpl' => 'DCDC',
  174. 'fon' => '4D5A',
  175. 'ocx' => '4D5A',
  176. 'olb' => '4D5A',
  177. 'scr' => '4D5A',
  178. 'vbx' => '4D5A',
  179. 'vxd' => '4D5A',
  180. '386' => '4D5A',
  181. 'api' => '4D5A900003000000',
  182. 'flt' => '76323030332E3130',
  183. 'zap' => '4D5A90000300000004000000FFFF',
  184. 'sln' => '4D6963726F736F66742056697375616C',
  185. 'jnt' => '4E422A00',
  186. 'jtp' => '4E422A00',
  187. 'cod' => '4E616D653A20',
  188. 'dbf' => '4F504C4461746162',
  189. 'oga' => '4F67675300020000',
  190. 'ogg' => '4F67675300020000',
  191. 'ogv' => '4F67675300020000',
  192. 'ogx' => '4F67675300020000',
  193. 'dw4' => '4F7B',
  194. 'pgm' => '50350A',
  195. 'pax' => '504158',
  196. 'pgd' => '504750644D41494E',
  197. 'img' => 'EB3C902A',
  198. 'zip' => '504B0304140000',
  199. 'docx' => '504B030414000600',
  200. 'pptx' => '504B030414000600',
  201. 'xlsx' => '504B030414000600',
  202. 'kwd' => '504B0304',
  203. 'odt' => '504B0304',
  204. 'odp' => '504B0304',
  205. 'ott' => '504B0304',
  206. 'sxc' => '504B0304',
  207. 'sxd' => '504B0304',
  208. 'sxi' => '504B0304',
  209. 'sxw' => '504B0304',
  210. 'wmz' => '504B0304',
  211. 'xpi' => '504B0304',
  212. 'xps' => '504B0304',
  213. 'xpt' => '5850434F4D0A5479',
  214. 'grp' => '504D4343',
  215. 'qemu' => '514649',
  216. 'abd' => '5157205665722E20',
  217. 'qsd' => '5157205665722E20',
  218. 'reg' => 'FFFE',
  219. 'sud' => '52454745444954',
  220. 'ani' => '52494646',
  221. 'cmx' => '52494646',
  222. 'ds4' => '52494646',
  223. '4xm' => '52494646',
  224. 'avi' => '52494646',
  225. 'cda' => '52494646',
  226. 'qcp' => '52494646',
  227. 'rmi' => '52494646',
  228. 'wav' => '52494646',
  229. 'cap' => '58435000',
  230. 'rar' => '526172211A0700',
  231. 'ast' => '5343486C',
  232. 'shw' => '53484F57',
  233. 'cpi' => 'FF464F4E54',
  234. 'sit' => '5374756666497420',
  235. 'sdr' => '534D415254445257',
  236. 'cnv' => '53514C4F434F4E56',
  237. 'cal' => 'B5A2B0B3B3B0A5B5',
  238. 'info' => 'E310000100000000',
  239. 'uce' => '55434558',
  240. 'ufa' => '554641C6D2C1',
  241. 'pch' => '564350434830',
  242. 'ctl' => '56455253494F4E20',
  243. 'ws2' => '575332303030',
  244. 'lwp' => '576F726450726F',
  245. 'bdr' => '5854',
  246. 'zoo' => '5A4F4F20',
  247. 'ecf' => '5B47656E6572616C',
  248. 'vcw' => '5B4D535643',
  249. 'dun' => '5B50686F6E655D',
  250. 'sam' => '5B7665725D',
  251. 'cpx' => '5B57696E646F7773',
  252. 'cfg' => '5B666C7473696D2E',
  253. 'cas' => '5F434153455F',
  254. 'cbk' => '5F434153455F',
  255. 'arj' => '60EA',
  256. 'vhd' => '636F6E6563746978',
  257. 'csh' => '6375736800000002',
  258. 'p10' => '64000000',
  259. 'dex' => '6465780A30303900',
  260. 'dsw' => '64737766696C65',
  261. 'flac' => '664C614300000022',
  262. 'dbb' => '6C33336C',
  263. 'acd' => '72696666',
  264. 'ram' => '727473703A2F2F',
  265. 'dmg' => '78',
  266. 'lgc' => '7B0D0A6F20',
  267. 'lgd' => '7B0D0A6F20',
  268. 'pwi' => '7B5C707769',
  269. 'rtf' => '7B5C72746631',
  270. 'psp' => '7E424B00',
  271. 'wab' => '9CCBCB8D1375D211',
  272. 'wpf' => '81CDAB',
  273. 'png' => '89504E470D0A1A0A',
  274. 'aw' => '8A0109000000E108',
  275. 'hap' => '91334846',
  276. 'skr' => '9501',
  277. 'gpg' => '99',
  278. 'pkr' => '9901',
  279. 'qdf' => 'AC9EBD8F0000',
  280. 'pwl' => 'E3828596',
  281. 'dcx' => 'B168DE3A',
  282. 'tib' => 'B46E6844',
  283. 'acs' => 'C3ABCDAB',
  284. 'lbk' => 'C8007900',
  285. 'class' => 'CAFEBABE',
  286. 'dbx' => 'CFAD12FE',
  287. 'dot' => 'D0CF11E0A1B11AE1',
  288. 'pps' => 'D0CF11E0A1B11AE1',
  289. 'ppt' => 'D0CF11E0A1B11AE1',
  290. 'xla' => 'D0CF11E0A1B11AE1',
  291. 'xls' => 'D0CF11E0A1B11AE1',
  292. 'wiz' => 'D0CF11E0A1B11AE1',
  293. 'ac_' => 'D0CF11E0A1B11AE1',
  294. 'adp' => 'D0CF11E0A1B11AE1',
  295. 'apr' => 'D0CF11E0A1B11AE1',
  296. 'mtw' => 'D0CF11E0A1B11AE1',
  297. 'opt' => 'D0CF11E0A1B11AE1',
  298. 'pub' => 'D0CF11E0A1B11AE1',
  299. 'rvt' => 'D0CF11E0A1B11AE1',
  300. 'sou' => 'D0CF11E0A1B11AE1',
  301. 'spo' => 'D0CF11E0A1B11AE1',
  302. 'vsd' => 'D0CF11E0A1B11AE1',
  303. 'wps' => 'D0CF11E0A1B11AE1',
  304. 'ftr' => 'D20A0000',
  305. 'arl' => 'D42A',
  306. 'aut' => 'D42A',
  307. 'wmf' => 'D7CDC69A',
  308. 'efx' => 'DCFE',
  309. 'one' => 'E4525C7B8CD8A74D',
  310. 'rpm' => 'EDABEEDB',
  311. 'gho' => 'FEEF',
  312. 'ghs' => 'FEEF',
  313. 'wp' => 'FF575043',
  314. 'wpd' => 'FF575043',
  315. 'wpg' => 'FF575043',
  316. 'wpp' => 'FF575043',
  317. 'wp5' => 'FF575043',
  318. 'wp6' => 'FF575043',
  319. 'jfif' => 'FFD8FF',
  320. 'jpe' => 'FFD8FF',
  321. 'jpeg' => 'FFD8FF',
  322. 'jpg' => 'FFD8FF',
  323. 'mof' => 'FFFE23006C006900',
  324. 'ipa' => '504B03040A',
  325. );
  326. /**
  327. * Check file type
  328. *
  329. * @param string $filePath file path
  330. * @param string $fileExt file extension
  331. *
  332. * @return boolean
  333. */
  334. public static function validation($filePath, $fileExt)
  335. {
  336. // 文件格式未知
  337. if (!isset(self::$_fileFormats[$fileExt]))
  338. {
  339. return false;
  340. }
  341. $length = strlen(self::$_fileFormats[$fileExt]);
  342. $bin = self::_readFile($filePath, $length);
  343. $fileHead = @unpack("H{$length}", $bin);
  344. // 判断文件头
  345. if (strtolower(self::$_fileFormats[$fileExt]) == $fileHead[1])
  346. {
  347. return true;
  348. }
  349. return false;
  350. }
  351. /**
  352. * Read file content
  353. *
  354. * @param string $filePath file path
  355. * @param integer $size
  356. *
  357. * @return string
  358. */
  359. private function _readFile($filePath, $size)
  360. {
  361. $file = fopen($filePath, "rb");
  362. $bin = fread($file, $size);
  363. fclose($file);
  364. return $bin;
  365. }
  366. }
  367. ?>
复制代码

调用示例:

  1. require './class_filetypevalidation.php';
  2. // 文件路径
  3. $filePath = "D:/test.png";
  4. $x = FileTypeValidation::validation($filePath, 'zip');
  5. var_dump($x);
  6. ?>
复制代码


Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template