34 'application/octet-stream',
35 'application/x-netcdf',
38 'text/richtext',
'image/x-bitmap',
'application/postscript',
'application/base64',
39 'application/macbinhex40',
'application/x-cdf',
'text/scriptlet'
42 'application/pdf',
'audio/x-aiff',
'audio/basic',
'audio/wav',
'image/gif',
43 'image/pjpeg',
'image/jpeg',
'image/tiff',
'image/x-png',
'image/png',
'image/bmp',
44 'image/x-jg',
'image/x-art',
'image/x-emf',
'image/x-wmf',
'video/avi',
45 'video/x-msvideo',
'video/mpeg',
'application/x-compressed',
46 'application/x-zip-compressed',
'application/x-gzip-compressed',
'application/java',
47 'application/x-msdownload'
49 'html' => [
'text/html' ],
57 'text' => [
'text/xml',
'application/xml' ]
68 '.323' =>
'text/h323',
69 '.3g2' =>
'video/3gpp2',
70 '.3gp' =>
'video/3gpp',
71 '.3gp2' =>
'video/3gpp2',
72 '.3gpp' =>
'video/3gpp',
73 '.aac' =>
'audio/aac',
74 '.ac3' =>
'audio/ac3',
75 '.accda' =>
'application/msaccess',
76 '.accdb' =>
'application/msaccess',
77 '.accdc' =>
'application/msaccess',
78 '.accde' =>
'application/msaccess',
79 '.accdr' =>
'application/msaccess',
80 '.accdt' =>
'application/msaccess',
81 '.ade' =>
'application/msaccess',
82 '.adp' =>
'application/msaccess',
83 '.adts' =>
'audio/aac',
84 '.ai' =>
'application/postscript',
85 '.aif' =>
'audio/aiff',
86 '.aifc' =>
'audio/aiff',
87 '.aiff' =>
'audio/aiff',
88 '.amc' =>
'application/x-mpeg',
89 '.application' =>
'application/x-ms-application',
90 '.asf' =>
'video/x-ms-asf',
91 '.asx' =>
'video/x-ms-asf',
92 '.au' =>
'audio/basic',
93 '.avi' =>
'video/avi',
94 '.bmp' =>
'image/bmp',
95 '.caf' =>
'audio/x-caf',
96 '.cat' =>
'application/vnd.ms-pki.seccat',
97 '.cbo' =>
'application/sha',
98 '.cdda' =>
'audio/aiff',
99 '.cer' =>
'application/x-x509-ca-cert',
100 '.conf' =>
'text/plain',
101 '.crl' =>
'application/pkix-crl',
102 '.crt' =>
'application/x-x509-ca-cert',
103 '.css' =>
'text/css',
104 '.csv' =>
'application/vnd.ms-excel',
105 '.der' =>
'application/x-x509-ca-cert',
106 '.dib' =>
'image/bmp',
107 '.dif' =>
'video/x-dv',
108 '.dll' =>
'application/x-msdownload',
109 '.doc' =>
'application/msword',
110 '.docm' =>
'application/vnd.ms-word.document.macroEnabled.12',
111 '.docx' =>
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
112 '.dot' =>
'application/msword',
113 '.dotm' =>
'application/vnd.ms-word.template.macroEnabled.12',
114 '.dotx' =>
'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
115 '.dv' =>
'video/x-dv',
116 '.dwfx' =>
'model/vnd.dwfx+xps',
117 '.edn' =>
'application/vnd.adobe.edn',
118 '.eml' =>
'message/rfc822',
119 '.eps' =>
'application/postscript',
120 '.etd' =>
'application/x-ebx',
121 '.exe' =>
'application/x-msdownload',
122 '.fdf' =>
'application/vnd.fdf',
123 '.fif' =>
'application/fractals',
124 '.gif' =>
'image/gif',
125 '.gsm' =>
'audio/x-gsm',
126 '.hqx' =>
'application/mac-binhex40',
127 '.hta' =>
'application/hta',
128 '.htc' =>
'text/x-component',
129 '.htm' =>
'text/html',
130 '.html' =>
'text/html',
131 '.htt' =>
'text/webviewhtml',
132 '.hxa' =>
'application/xml',
133 '.hxc' =>
'application/xml',
134 '.hxd' =>
'application/octet-stream',
135 '.hxe' =>
'application/xml',
136 '.hxf' =>
'application/xml',
137 '.hxh' =>
'application/octet-stream',
138 '.hxi' =>
'application/octet-stream',
139 '.hxk' =>
'application/xml',
140 '.hxq' =>
'application/octet-stream',
141 '.hxr' =>
'application/octet-stream',
142 '.hxs' =>
'application/octet-stream',
143 '.hxt' =>
'application/xml',
144 '.hxv' =>
'application/xml',
145 '.hxw' =>
'application/octet-stream',
146 '.ico' =>
'image/x-icon',
147 '.iii' =>
'application/x-iphone',
148 '.ins' =>
'application/x-internet-signup',
149 '.iqy' =>
'text/x-ms-iqy',
150 '.isp' =>
'application/x-internet-signup',
151 '.jfif' =>
'image/jpeg',
152 '.jnlp' =>
'application/x-java-jnlp-file',
153 '.jpe' =>
'image/jpeg',
154 '.jpeg' =>
'image/jpeg',
155 '.jpg' =>
'image/jpeg',
156 '.jtx' =>
'application/x-jtx+xps',
157 '.latex' =>
'application/x-latex',
158 '.log' =>
'text/plain',
159 '.m1v' =>
'video/mpeg',
160 '.m2v' =>
'video/mpeg',
161 '.m3u' =>
'audio/x-mpegurl',
162 '.mac' =>
'image/x-macpaint',
163 '.man' =>
'application/x-troff-man',
164 '.mda' =>
'application/msaccess',
165 '.mdb' =>
'application/msaccess',
166 '.mde' =>
'application/msaccess',
167 '.mfp' =>
'application/x-shockwave-flash',
168 '.mht' =>
'message/rfc822',
169 '.mhtml' =>
'message/rfc822',
170 '.mid' =>
'audio/mid',
171 '.midi' =>
'audio/mid',
172 '.mod' =>
'video/mpeg',
173 '.mov' =>
'video/quicktime',
174 '.mp2' =>
'video/mpeg',
175 '.mp2v' =>
'video/mpeg',
176 '.mp3' =>
'audio/mpeg',
177 '.mp4' =>
'video/mp4',
178 '.mpa' =>
'video/mpeg',
179 '.mpe' =>
'video/mpeg',
180 '.mpeg' =>
'video/mpeg',
181 '.mpf' =>
'application/vnd.ms-mediapackage',
182 '.mpg' =>
'video/mpeg',
183 '.mpv2' =>
'video/mpeg',
184 '.mqv' =>
'video/quicktime',
185 '.NMW' =>
'application/nmwb',
186 '.nws' =>
'message/rfc822',
187 '.odc' =>
'text/x-ms-odc',
188 '.ols' =>
'application/vnd.ms-publisher',
189 '.p10' =>
'application/pkcs10',
190 '.p12' =>
'application/x-pkcs12',
191 '.p7b' =>
'application/x-pkcs7-certificates',
192 '.p7c' =>
'application/pkcs7-mime',
193 '.p7m' =>
'application/pkcs7-mime',
194 '.p7r' =>
'application/x-pkcs7-certreqresp',
195 '.p7s' =>
'application/pkcs7-signature',
196 '.pct' =>
'image/pict',
197 '.pdf' =>
'application/pdf',
198 '.pdx' =>
'application/vnd.adobe.pdx',
199 '.pfx' =>
'application/x-pkcs12',
200 '.pic' =>
'image/pict',
201 '.pict' =>
'image/pict',
202 '.pinstall' =>
'application/x-picasa-detect',
203 '.pko' =>
'application/vnd.ms-pki.pko',
204 '.png' =>
'image/png',
205 '.pnt' =>
'image/x-macpaint',
206 '.pntg' =>
'image/x-macpaint',
207 '.pot' =>
'application/vnd.ms-powerpoint',
208 '.potm' =>
'application/vnd.ms-powerpoint.template.macroEnabled.12',
209 '.potx' =>
'application/vnd.openxmlformats-officedocument.presentationml.template',
210 '.ppa' =>
'application/vnd.ms-powerpoint',
211 '.ppam' =>
'application/vnd.ms-powerpoint.addin.macroEnabled.12',
212 '.pps' =>
'application/vnd.ms-powerpoint',
213 '.ppsm' =>
'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
214 '.ppsx' =>
'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
215 '.ppt' =>
'application/vnd.ms-powerpoint',
216 '.pptm' =>
'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
217 '.pptx' =>
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
218 '.prf' =>
'application/pics-rules',
219 '.ps' =>
'application/postscript',
220 '.pub' =>
'application/vnd.ms-publisher',
221 '.pwz' =>
'application/vnd.ms-powerpoint',
222 '.py' =>
'text/plain',
223 '.pyw' =>
'text/plain',
224 '.qht' =>
'text/x-html-insertion',
225 '.qhtm' =>
'text/x-html-insertion',
226 '.qt' =>
'video/quicktime',
227 '.qti' =>
'image/x-quicktime',
228 '.qtif' =>
'image/x-quicktime',
229 '.qtl' =>
'application/x-quicktimeplayer',
230 '.rat' =>
'application/rat-file',
231 '.rmf' =>
'application/vnd.adobe.rmf',
232 '.rmi' =>
'audio/mid',
233 '.rqy' =>
'text/x-ms-rqy',
234 '.rtf' =>
'application/msword',
235 '.sct' =>
'text/scriptlet',
236 '.sd2' =>
'audio/x-sd2',
237 '.sdp' =>
'application/sdp',
238 '.shtml' =>
'text/html',
239 '.sit' =>
'application/x-stuffit',
240 '.sldm' =>
'application/vnd.ms-powerpoint.slide.macroEnabled.12',
241 '.sldx' =>
'application/vnd.openxmlformats-officedocument.presentationml.slide',
242 '.slk' =>
'application/vnd.ms-excel',
243 '.snd' =>
'audio/basic',
244 '.so' =>
'application/x-apachemodule',
245 '.sol' =>
'text/plain',
246 '.sor' =>
'text/plain',
247 '.spc' =>
'application/x-pkcs7-certificates',
248 '.spl' =>
'application/futuresplash',
249 '.sst' =>
'application/vnd.ms-pki.certstore',
250 '.stl' =>
'application/vnd.ms-pki.stl',
251 '.swf' =>
'application/x-shockwave-flash',
252 '.thmx' =>
'application/vnd.ms-officetheme',
253 '.tif' =>
'image/tiff',
254 '.tiff' =>
'image/tiff',
255 '.txt' =>
'text/plain',
256 '.uls' =>
'text/iuls',
257 '.vcf' =>
'text/x-vcard',
258 '.vdx' =>
'application/vnd.ms-visio.viewer',
259 '.vsd' =>
'application/vnd.ms-visio.viewer',
260 '.vss' =>
'application/vnd.ms-visio.viewer',
261 '.vst' =>
'application/vnd.ms-visio.viewer',
262 '.vsx' =>
'application/vnd.ms-visio.viewer',
263 '.vtx' =>
'application/vnd.ms-visio.viewer',
264 '.wav' =>
'audio/wav',
265 '.wax' =>
'audio/x-ms-wax',
266 '.wbk' =>
'application/msword',
267 '.wdp' =>
'image/vnd.ms-photo',
268 '.wiz' =>
'application/msword',
269 '.wm' =>
'video/x-ms-wm',
270 '.wma' =>
'audio/x-ms-wma',
271 '.wmd' =>
'application/x-ms-wmd',
272 '.wmv' =>
'video/x-ms-wmv',
273 '.wmx' =>
'video/x-ms-wmx',
274 '.wmz' =>
'application/x-ms-wmz',
275 '.wpl' =>
'application/vnd.ms-wpl',
276 '.wsc' =>
'text/scriptlet',
277 '.wvx' =>
'video/x-ms-wvx',
278 '.xaml' =>
'application/xaml+xml',
279 '.xbap' =>
'application/x-ms-xbap',
280 '.xdp' =>
'application/vnd.adobe.xdp+xml',
281 '.xfdf' =>
'application/vnd.adobe.xfdf',
282 '.xht' =>
'application/xhtml+xml',
283 '.xhtml' =>
'application/xhtml+xml',
284 '.xla' =>
'application/vnd.ms-excel',
285 '.xlam' =>
'application/vnd.ms-excel.addin.macroEnabled.12',
286 '.xlk' =>
'application/vnd.ms-excel',
287 '.xll' =>
'application/vnd.ms-excel',
288 '.xlm' =>
'application/vnd.ms-excel',
289 '.xls' =>
'application/vnd.ms-excel',
290 '.xlsb' =>
'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
291 '.xlsm' =>
'application/vnd.ms-excel.sheet.macroEnabled.12',
292 '.xlsx' =>
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
293 '.xlt' =>
'application/vnd.ms-excel',
294 '.xltm' =>
'application/vnd.ms-excel.template.macroEnabled.12',
295 '.xltx' =>
'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
296 '.xlw' =>
'application/vnd.ms-excel',
297 '.xml' =>
'text/xml',
298 '.xps' =>
'application/vnd.ms-xpsdocument',
299 '.xsl' =>
'text/xml',
307 protected $versions = [
'ie05',
'ie06',
'ie07',
'ie07.strict',
'ie07.nohtml' ];
317 foreach ( $this->versions as $version ) {
318 if ( isset( $this->addedTypes[$version] ) ) {
319 foreach ( $this->addedTypes[$version] as $format =>
$addedTypes ) {
320 $types[$format] = array_merge( $types[$format],
$addedTypes );
323 $this->typeTable[$version] = $types;
339 $types = array_map( [ $this,
'translateMimeType' ], $types );
351 'image/pjpeg' =>
'image/jpeg',
352 'image/x-png' =>
'image/png',
353 'image/x-wmf' =>
'application/x-msmetafile',
354 'image/bmp' =>
'image/x-bmp',
355 'application/x-zip-compressed' =>
'application/zip',
356 'application/x-compressed' =>
'application/x-compress',
357 'application/x-gzip-compressed' =>
'application/x-gzip',
358 'audio/mid' =>
'audio/midi',
360 if ( isset( $table[
$type] ) ) {
377 foreach ( $this->versions as $version ) {
393 $semiPos = strpos( $proposed,
';' );
394 if ( $semiPos !==
false ) {
395 $proposed = substr( $proposed, 0, $semiPos );
398 $proposedFormat = $this->
getDataFormat( $version, $proposed );
399 if ( $proposedFormat ==
'unknown'
400 && $proposed !=
'multipart/mixed'
401 && $proposed !=
'multipart/x-mixed-replace'
405 if ( strval( $chunk ) ===
'' ) {
410 $chunk = substr( $chunk, 0, 255 );
415 $result = $this->
sampleData( $version, $chunk );
416 $sampleFound = $result[
'found'];
417 $counters = $result[
'counters'];
421 if ( $proposed ==
'text/html' && isset( $sampleFound[
'html'] ) ) {
424 if ( $proposed ==
'image/gif' && $binaryType ==
'image/gif' ) {
427 if ( ( $proposed ==
'image/pjpeg' || $proposed ==
'image/jpeg' )
428 && $binaryType ==
'image/pjpeg'
433 if ( $version >=
'ie07'
434 && ( $proposed ==
'image/x-png' || $proposed ==
'image/png' )
435 && $binaryType ==
'image/x-png'
441 if ( isset( $sampleFound[
'cdf'] ) ) {
442 return 'application/x-cdf';
447 if ( isset( $sampleFound[
'rss'] ) ) {
448 return 'application/rss+xml';
450 if ( isset( $sampleFound[
'rdf-tag'] )
451 && isset( $sampleFound[
'rdf-url'] )
452 && isset( $sampleFound[
'rdf-purl'] )
454 return 'application/rss+xml';
456 if ( isset( $sampleFound[
'atom'] ) ) {
457 return 'application/atom+xml';
460 if ( isset( $sampleFound[
'xml'] ) ) {
462 if ( strpos( $version,
'strict' ) !==
false ) {
463 if ( $proposed ==
'text/html' || $proposed ==
'text/xml' ) {
470 if ( isset( $sampleFound[
'html'] ) ) {
472 if ( strpos( $version,
'nohtml' ) !==
false ) {
473 if ( $proposed ==
'text/plain' ) {
480 if ( isset( $sampleFound[
'xbm'] ) ) {
481 return 'image/x-bitmap';
483 if ( isset( $sampleFound[
'binhex'] ) ) {
484 return 'application/macbinhex40';
486 if ( isset( $sampleFound[
'scriptlet'] ) ) {
487 if ( strpos( $version,
'strict' ) !==
false ) {
488 if ( $proposed ==
'text/plain' || $proposed ==
'text/scriptlet' ) {
489 return 'text/scriptlet';
492 return 'text/scriptlet';
498 if ( $counters[
'ctrl'] != 0 && ( $counters[
'ff'] + $counters[
'low'] )
499 < ( $counters[
'ctrl'] + $counters[
'high'] ) * 16
501 $kindOfBinary =
true;
502 $type = $binaryType ?: $textType;
503 if (
$type ===
false ) {
504 $type =
'application/octet-stream';
507 $kindOfBinary =
false;
508 $type = $textType ?: $binaryType;
509 if (
$type ===
false ) {
510 $type =
'text/plain';
517 if ( $detectedFormat !=
'ambiguous' ) {
521 if ( $proposedFormat !=
'ambiguous' ) {
523 if ( $proposedFormat ==
'text' && !$kindOfBinary ) {
526 if ( $proposedFormat ==
'binary' && $kindOfBinary ) {
529 if ( $proposedFormat ==
'html' ) {
535 $dotPos = strrpos( $fileName,
'.' );
536 if ( $dotPos ===
false ) {
539 $ext = substr( $fileName, $dotPos );
540 if ( isset( $this->registry[
$ext] ) ) {
541 return $this->registry[
$ext];
560 $chunk2 = substr( $chunk, 0, 2 );
561 $chunk4 = substr( $chunk, 0, 4 );
562 $chunk5 = substr( $chunk, 0, 5 );
563 if ( $chunk4 ==
'%PDF' ) {
564 return 'application/pdf';
566 if ( $chunk2 ==
'%!' ) {
567 return 'application/postscript';
569 if ( $chunk5 ==
'{\\rtf' ) {
570 return 'text/richtext';
572 if ( $chunk5 ==
'begin' ) {
573 return 'application/base64';
586 $chunk2 = substr( $chunk, 0, 2 );
587 $chunk3 = substr( $chunk, 0, 3 );
588 $chunk4 = substr( $chunk, 0, 4 );
589 $chunk5 = substr( $chunk, 0, 5 );
590 $chunk5uc = strtoupper( $chunk5 );
591 $chunk8 = substr( $chunk, 0, 8 );
592 if ( $chunk5uc ==
'GIF87' || $chunk5uc ==
'GIF89' ) {
595 if ( $chunk2 ==
"\xff\xd8" ) {
596 return 'image/pjpeg';
600 && substr( $chunk, 6, 2 ) ==
"\000\000"
601 && substr( $chunk, 8, 2 ) ==
"\000\000"
605 if ( $chunk4 ==
'RIFF'
606 && substr( $chunk, 8, 4 ) ==
'WAVE'
612 if ( $chunk4 ==
".sd\000"
614 || $chunk4 ==
"\000ds."
617 return 'audio/basic';
619 if ( $chunk3 ==
"MM\000" ) {
622 if ( $chunk2 ==
'MZ' ) {
623 return 'application/x-msdownload';
625 if ( $chunk8 ==
"\x89PNG\x0d\x0a\x1a\x0a" ) {
626 return 'image/x-png';
628 if ( strlen( $chunk ) >= 5 ) {
629 $byte2 = ord( $chunk[2] );
630 $byte4 = ord( $chunk[4] );
631 if ( $byte2 >= 3 && $byte2 <= 31 && $byte4 == 0 && $chunk2 ==
'JG' ) {
636 if ( $chunk4 ==
'MROF' ) {
637 return 'audio/x-aiff';
639 $chunk4_8 = substr( $chunk, 8, 4 );
640 if ( $chunk4 ==
'FORM' && ( $chunk4_8 ==
'AIFF' || $chunk4_8 ==
'AIFC' ) ) {
641 return 'audio/x-aiff';
643 if ( $chunk4 ==
'RIFF' && $chunk4_8 ==
'AVI ' ) {
646 if ( $chunk4 ==
"\x00\x00\x01\xb3" || $chunk4 ==
"\x00\x00\x01\xba" ) {
649 if ( $chunk4 ==
"\001\000\000\000"
650 && substr( $chunk, 40, 4 ) ==
' EMF'
652 return 'image/x-emf';
654 if ( $chunk4 ==
"\xd7\xcd\xc6\x9a" ) {
655 return 'image/x-wmf';
657 if ( $chunk4 ==
"\xca\xfe\xba\xbe" ) {
658 return 'application/java';
660 if ( $chunk2 ==
'PK' ) {
661 return 'application/x-zip-compressed';
663 if ( $chunk2 ==
"\x1f\x9d" ) {
664 return 'application/x-compressed';
666 if ( $chunk2 ==
"\x1f\x8b" ) {
667 return 'application/x-gzip-compressed';
670 if ( $chunk5 ==
"MThd\000" ) {
673 if ( $chunk4 ==
'%PDF' ) {
674 return 'application/pdf';
708 $rdfUrl =
'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
709 $rdfPurl =
'http://purl.org/rss/1.0/';
710 $xbmMagic1 =
'#define';
711 $xbmMagic2 =
'_width';
712 $xbmMagic3 =
'_bits';
713 $binhexMagic =
'converted with BinHex';
714 $chunkLength = strlen( $chunk );
716 for ( $offset = 0; $offset < $chunkLength; $offset++ ) {
717 $curChar = $chunk[$offset];
718 if ( $curChar ==
"\x0a" ) {
721 } elseif ( $curChar ==
"\x0d" ) {
724 } elseif ( $curChar ==
"\x0c" ) {
727 } elseif ( $curChar ==
"\t" ) {
730 } elseif ( ord( $curChar ) < 32 ) {
733 } elseif ( ord( $curChar ) >= 128 ) {
739 if ( $curChar ==
'<' ) {
741 $remainder = substr( $chunk, $offset + 1 );
742 if ( !strncasecmp( $remainder,
'?XML', 4 ) ) {
743 $nextChar = substr( $chunk, $offset + 5, 1 );
744 if ( $nextChar ==
':' || $nextChar ==
' ' || $nextChar ==
"\t" ) {
745 $found[
'xml'] =
true;
749 if ( !strncasecmp( $remainder,
'SCRIPTLET', 9 ) ) {
750 $found[
'scriptlet'] =
true;
754 foreach ( $htmlTags as $tag ) {
755 if ( !strncasecmp( $remainder, $tag, strlen( $tag ) ) ) {
756 $found[
'html'] =
true;
762 if ( $version <
'ie07' ) {
763 if ( !strncasecmp( $remainder,
'CHANNEL', 7 ) ) {
764 $found[
'cdf'] =
true;
768 if ( !strncasecmp( $remainder,
'RSS', 3 ) ) {
769 $found[
'rss'] =
true;
772 if ( !strncasecmp( $remainder,
'rdf:RDF', 7 ) ) {
773 $found[
'rdf-tag'] =
true;
776 if ( !strncasecmp( $remainder,
'FEED', 4 ) ) {
777 $found[
'atom'] =
true;
787 $remainder = substr( $chunk, $offset );
788 if ( !strncasecmp( $remainder, $rdfUrl, strlen( $rdfUrl ) ) ) {
789 $found[
'rdf-url'] =
true;
790 if ( isset( $found[
'rdf-tag'] )
791 && isset( $found[
'rdf-purl'] )
798 if ( !strncasecmp( $remainder, $rdfPurl, strlen( $rdfPurl ) ) ) {
799 if ( isset( $found[
'rdf-tag'] )
800 && isset( $found[
'rdf-url'] )
808 if ( !strncasecmp( $remainder, $xbmMagic1, strlen( $xbmMagic1 ) ) ) {
809 $found[
'xbm1'] =
true;
812 if ( $curChar ==
'_' ) {
813 if ( isset( $found[
'xbm2'] ) ) {
814 if ( !strncasecmp( $remainder, $xbmMagic3, strlen( $xbmMagic3 ) ) ) {
815 $found[
'xbm'] =
true;
818 } elseif ( isset( $found[
'xbm1'] ) ) {
819 if ( !strncasecmp( $remainder, $xbmMagic2, strlen( $xbmMagic2 ) ) ) {
820 $found[
'xbm2'] =
true;
826 if ( !strncmp( $remainder, $binhexMagic, strlen( $binhexMagic ) ) ) {
827 $found[
'binhex'] =
true;
830 return [
'found' => $found,
'counters' => $counters ];
839 $types = $this->typeTable[$version];
840 if (
$type ==
'(null)' || strval(
$type ) ===
'' ) {
843 foreach ( $types as $format => $list ) {
844 if ( in_array(
$type, $list ) ) {