【CodeBase】PHP检查未知媒体文件的格式

用法:

<?php

$filefullpath="F:/test/2awd45wr1e5fef5e5";
echo Format::check($filefullpath,['png','jpg','gif']);

 

格式检查类:

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

 

posted @ 2017-08-15 02:11  GaZeon  阅读(269)  评论(0编辑  收藏  举报