<?php
/**
* 检证文件类型类
*
* @author Silver
*/
class FileTypeValidation
{
// 文件类型,不同的头信息
private static $_fileFormats = Array(
'jp2' => '0000000C6A502020',
'3gp' => '0000002066747970',
'3gp5' => '0000001866747970',
'm4a' => '00000020667479704D3441',
'ico' => '00000100',
'spl' => '00000100',
'vob' => '000001BA',
'cur' => '00000200',
'wb2' => '00000200',
'wk1' => '0000020006040600',
'wk3' => '00001A0000100400',
'wk4' => '00001A0002100400',
'wk5' => '00001A0002100400',
'123' => '00001A00051004',
'qxd' => '00004D4D585052',
'mdf' => '010F0000',
'tr1' => '0110',
'rgb' => '01DA01010003',
'drw' => '07',
'dss' => '02647373',
'dat' => 'A90D000000000000',
'db3' => '03',
'qph' => '03000000',
'adx' => '80000020031204',
'db4' => '04',
'n' => 'FFFE0000',
'a' => 'FFFE0000',
'skf' => '07534B46',
'dtd' => '0764743264647464',
'db' => 'D0CF11E0A1B11AE1',
'pcx' => '0A050101',
'mp' => '0CED',
'doc' => 'D0CF11E0A1B11AE1',
'nri' => '0E4E65726F49534F',
'wks' => 'FF00020004040554',
'pf' => '1100000053434341',
'ntf' => '4E49544630',
'nsf' => '4E45534D1A01',
'arc' => '41724301',
'pak' => '5041434B',
'eth' => '1A350100',
'mkv' => '1A45DFA393428288',
'ws' => '1D7D',
'gz' => '1F8B08',
'tar.z' => '1FA0',
'ain' => '2112',
'lib' => '213C617263683E0A',
'msi' => 'D0CF11E0A1B11AE1',
'vmdk' => '4B444D',
'dsp' => '23204D6963726F73',
'amr' => '2321414D52',
'hdr' => '49536328',
'sav' => '24464C3240282329',
'eps' => 'C5D0D3C6',
'pdf' => '25504446',
'fdf' => '25504446',
'hqx' => '2854686973206669',
'log' => '2A2A2A2020496E73',
'ivr' => '2E524543',
'rm' => '2E524D46',
'rmvb' => '2E524D46',
'ra' => '2E7261FD00',
'au' => '646E732E',
'cat' => '30',
'evt' => '300000004C664C65',
'asf' => '3026B2758E66CF11',
'wma' => '3026B2758E66CF11',
'wmv' => '3026B2758E66CF11',
'wri' => 'BE000000AB',
'7z' => '377ABCAF271C',
'psd' => '38425053',
'sle' => '414376',
'asx' => '3C',
'xdr' => '3C',
'dci' => '3C21646F63747970',
'manifest' => '3C3F786D6C2076657273696F6E3D',
'xml' => '3C3F786D6C2076657273696F6E3D22312E30223F3E',
'msc' => 'D0CF11E0A1B11AE1',
'fm' => '3C4D616B65724669',
'mif' => '56657273696F6E20',
'gid' => '4C4E0200',
'hlp' => '4C4E0200',
'dwg' => '41433130',
'syw' => '414D594F',
'abi' => '414F4C494E444558',
'aby' => '414F4C4442',
'bag' => '414F4C2046656564',
'idx' => '5000000020000000',
'ind' => '414F4C494458',
'pfc' => '414F4C564D313030',
'org' => '414F4C564D313030',
'vcf' => '424547494E3A5643',
'bin' => '424C4932323351',
'bmp' => '424D',
'dib' => '424D',
'prc' => '424F4F4B4D4F4249',
'bz2' => '425A68',
'tar.bz2' => '425A68',
'tbz2' => '425A68',
'tb2' => '425A68',
'rtd' => '43232B44A4434DA5',
'cbd' => '434246494C45',
'iso' => '4344303031',
'clb' => '434F4D2B',
'cpt' => '43505446494C45',
'cru' => '43525553482076',
'swf' => '465753',
'ctf' => '436174616C6F6720',
'dms' => '444D5321',
'adf' => '5245564E554D3A2C',
'dvr' => '445644',
'ifo' => '445644',
'cdr' => '52494646',
'vcd' => '454E545259564344',
'mdi' => '4550',
'e01' => '4C5646090D0AFF00',
'evtx' => '456C6646696C6500',
'qbb' => '458600000600',
'cpe' => '464158434F564552',
'flv' => '464C56',
'aiff' => '464F524D00',
'eml' => '582D',
'gif' => '47494638',
'pat' => '47504154',
'gx2' => '475832',
'sh3' => '4848474231',
'tif' => '4D4D002B',
'tiff' => '4D4D002B',
'mp3' => '494433',
'koz' => '49443303000000',
'crw' => '49491A0000004845',
'cab' => '4D534346',
'lit' => '49544F4C49544C53',
'chi' => '49545346',
'chm' => '49545346',
'jar' => '5F27A889',
'jg' => '4A47040E000000',
'kgb' => '4B47425F61726368',
'shd' => '68490000',
'lnk' => '4C00000001140200',
'obj' => '80',
'pdb' => 'ACED000573720012',
'mar' => '4D41723000',
'dmp' => '504147454455',
'hdmp' => '4D444D5093A7',
'mls' => '4D563243',
'mmf' => '4D4D4D440000',
'nvram' => '4D52564E',
'ppz' => '4D534346',
'snp' => '4D534346',
'tlb' => '4D53465402000100',
'dvf' => '4D535F564F494345',
'msv' => '4D535F564F494345',
'mid' => '4D546864',
'midi' => '4D546864',
'dsn' => '4D56',
'com' => 'EB',
'dll' => '4D5A',
'drv' => '4D5A',
'exe' => '4D5A',
'pif' => '4D5A',
'qts' => '4D5A',
'qtx' => '4D5A',
'sys' => 'FFFFFFFF',
'acm' => '4D5A',
'ax' => '4D5A900003000000',
'cpl' => 'DCDC',
'fon' => '4D5A',
'ocx' => '4D5A',
'olb' => '4D5A',
'scr' => '4D5A',
'vbx' => '4D5A',
'vxd' => '4D5A',
'386' => '4D5A',
'api' => '4D5A900003000000',
'flt' => '76323030332E3130',
'zap' => '4D5A90000300000004000000FFFF',
'sln' => '4D6963726F736F66742056697375616C',
'jnt' => '4E422A00',
'jtp' => '4E422A00',
'cod' => '4E616D653A20',
'dbf' => '4F504C4461746162',
'oga' => '4F67675300020000',
'ogg' => '4F67675300020000',
'ogv' => '4F67675300020000',
'ogx' => '4F67675300020000',
'dw4' => '4F7B',
'pgm' => '50350A',
'pax' => '504158',
'pgd' => '504750644D41494E',
'img' => 'EB3C902A',
'zip' => '504B0304140000',
'docx' => '504B030414000600',
'pptx' => '504B030414000600',
'xlsx' => '504B030414000600',
'kwd' => '504B0304',
'odt' => '504B0304',
'odp' => '504B0304',
'ott' => '504B0304',
'sxc' => '504B0304',
'sxd' => '504B0304',
'sxi' => '504B0304',
'sxw' => '504B0304',
'wmz' => '504B0304',
'xpi' => '504B0304',
'xps' => '504B0304',
'xpt' => '5850434F4D0A5479',
'grp' => '504D4343',
'qemu' => '514649',
'abd' => '5157205665722E20',
'qsd' => '5157205665722E20',
'reg' => 'FFFE',
'sud' => '52454745444954',
'ani' => '52494646',
'cmx' => '52494646',
'ds4' => '52494646',
'4xm' => '52494646',
'avi' => '52494646',
'cda' => '52494646',
'qcp' => '52494646',
'rmi' => '52494646',
'wav' => '52494646',
'cap' => '58435000',
'rar' => '526172211A0700',
'ast' => '5343486C',
'shw' => '53484F57',
'cpi' => 'FF464F4E54',
'sit' => '5374756666497420',
'sdr' => '534D415254445257',
'cnv' => '53514C4F434F4E56',
'cal' => 'B5A2B0B3B3B0A5B5',
'info' => 'E310000100000000',
'uce' => '55434558',
'ufa' => '554641C6D2C1',
'pch' => '564350434830',
'ctl' => '56455253494F4E20',
'ws2' => '575332303030',
'lwp' => '576F726450726F',
'bdr' => '5854',
'zoo' => '5A4F4F20',
'ecf' => '5B47656E6572616C',
'vcw' => '5B4D535643',
'dun' => '5B50686F6E655D',
'sam' => '5B7665725D',
'cpx' => '5B57696E646F7773',
'cfg' => '5B666C7473696D2E',
'cas' => '5F434153455F',
'cbk' => '5F434153455F',
'arj' => '60EA',
'vhd' => '636F6E6563746978',
'csh' => '6375736800000002',
'p10' => '64000000',
'dex' => '6465780A30303900',
'dsw' => '64737766696C65',
'flac' => '664C614300000022',
'dbb' => '6C33336C',
'acd' => '72696666',
'ram' => '727473703A2F2F',
'dmg' => '78',
'lgc' => '7B0D0A6F20',
'lgd' => '7B0D0A6F20',
'pwi' => '7B5C707769',
'rtf' => '7B5C72746631',
'psp' => '7E424B00',
'wab' => '9CCBCB8D1375D211',
'wpf' => '81CDAB',
'png' => '89504E470D0A1A0A',
'aw' => '8A0109000000E108',
'hap' => '91334846',
'skr' => '9501',
'gpg' => '99',
'pkr' => '9901',
'qdf' => 'AC9EBD8F0000',
'pwl' => 'E3828596',
'dcx' => 'B168DE3A',
'tib' => 'B46E6844',
'acs' => 'C3ABCDAB',
'lbk' => 'C8007900',
'class' => 'CAFEBABE',
'dbx' => 'CFAD12FE',
'dot' => 'D0CF11E0A1B11AE1',
'pps' => 'D0CF11E0A1B11AE1',
'ppt' => 'D0CF11E0A1B11AE1',
'xla' => 'D0CF11E0A1B11AE1',
'xls' => 'D0CF11E0A1B11AE1',
'wiz' => 'D0CF11E0A1B11AE1',
'ac_' => 'D0CF11E0A1B11AE1',
'adp' => 'D0CF11E0A1B11AE1',
'apr' => 'D0CF11E0A1B11AE1',
'mtw' => 'D0CF11E0A1B11AE1',
'opt' => 'D0CF11E0A1B11AE1',
'pub' => 'D0CF11E0A1B11AE1',
'rvt' => 'D0CF11E0A1B11AE1',
'sou' => 'D0CF11E0A1B11AE1',
'spo' => 'D0CF11E0A1B11AE1',
'vsd' => 'D0CF11E0A1B11AE1',
'wps' => 'D0CF11E0A1B11AE1',
'ftr' => 'D20A0000',
'arl' => 'D42A',
'aut' => 'D42A',
'wmf' => 'D7CDC69A',
'efx' => 'DCFE',
'one' => 'E4525C7B8CD8A74D',
'rpm' => 'EDABEEDB',
'gho' => 'FEEF',
'ghs' => 'FEEF',
'wp' => 'FF575043',
'wpd' => 'FF575043',
'wpg' => 'FF575043',
'wpp' => 'FF575043',
'wp5' => 'FF575043',
'wp6' => 'FF575043',
'jfif' => 'FFD8FF',
'jpe' => 'FFD8FF',
'jpeg' => 'FFD8FF',
'jpg' => 'FFD8FF',
'mof' => 'FFFE23006C006900',
'ipa' => '504B03040A',
);
/**
* 检查文件类型
*
* @param string $filePath 文件路径
* @param string $fileExt 文件扩展名
*
* @return boolean
*/
public static function validation($filePath, $fileExt)
{
// 文件格式未知
if (!isset(self::$_fileFormats[$fileExt]))
{
return false;
}
$length = strlen(self::$_fileFormats[$fileExt]);
$bin = self::_readFile($filePath, $length);
$fileHead = @unpack("H{$length}", $bin);
// 判断文件头
if (strtolower(self::$_fileFormats[$fileExt]) == $fileHead[1])
{
return true;
}
return false;
}
/**
* 读取文件内容
*
* @param string $filePath 文件路径
* @param integer $size
*
* @return string
*/
private function _readFile($filePath, $size)
{
$file = fopen($filePath, "rb");
$bin = fread($file, $size);
fclose($file);
return $bin;
}
}
?>调用
. 代码如下:require './class_filetypevalidation.php';
// 文件路径
$filePath = "D:/test.png";
$x = FileTypeValidation::validation($filePath, 'zip');
var_dump($x); 

解决方案 »

  1.   

    /**
    * 检证文件类型类
    *
    * @author Silver
    */
    class FileTypeValidation
    {
    // 文件类型,不同的头信息
    private static $_fileFormats = Array(
    'jp2' => '0000000C6A502020',
    '3gp' => '0000002066747970',
    '3gp5' => '0000001866747970',
    'm4a' => '00000020667479704D3441',
    'ico' => '00000100',
    'spl' => '00000100',
    'vob' => '000001BA',
    'cur' => '00000200',
    'wb2' => '00000200',
    'wk1' => '0000020006040600',
    'wk3' => '00001A0000100400',
    'wk4' => '00001A0002100400',
    'wk5' => '00001A0002100400',
    '123' => '00001A00051004',
    'qxd' => '00004D4D585052',
    'mdf' => '010F0000',
    'tr1' => '0110',
    'rgb' => '01DA01010003',
    'drw' => '07',
    'dss' => '02647373',
    'dat' => 'A90D000000000000',
    'db3' => '03',
    'qph' => '03000000',
    'adx' => '80000020031204',
    'db4' => '04',
    'n' => 'FFFE0000',
    'a' => 'FFFE0000',
    'skf' => '07534B46',
    'dtd' => '0764743264647464',
    'db' => 'D0CF11E0A1B11AE1',
    'pcx' => '0A050101',
    'mp' => '0CED',
    'doc' => 'D0CF11E0A1B11AE1',
    'nri' => '0E4E65726F49534F',
    'wks' => 'FF00020004040554',
    'pf' => '1100000053434341',
    'ntf' => '4E49544630',
    'nsf' => '4E45534D1A01',
    'arc' => '41724301',
    'pak' => '5041434B',
    'eth' => '1A350100',
    'mkv' => '1A45DFA393428288',
    'ws' => '1D7D',
    'gz' => '1F8B08',
    'tar.z' => '1FA0',
    'ain' => '2112',
    'lib' => '213C617263683E0A',
    'msi' => 'D0CF11E0A1B11AE1',
    'vmdk' => '4B444D',
    'dsp' => '23204D6963726F73',
    'amr' => '2321414D52',
    'hdr' => '49536328',
    'sav' => '24464C3240282329',
    'eps' => 'C5D0D3C6',
    'pdf' => '25504446',
    'fdf' => '25504446',
    'hqx' => '2854686973206669',
    'log' => '2A2A2A2020496E73',
    'ivr' => '2E524543',
    'rm' => '2E524D46',
    'rmvb' => '2E524D46',
    'ra' => '2E7261FD00',
    'au' => '646E732E',
    'cat' => '30',
    'evt' => '300000004C664C65',
    'asf' => '3026B2758E66CF11',
    'wma' => '3026B2758E66CF11',
    'wmv' => '3026B2758E66CF11',
    'wri' => 'BE000000AB',
    '7z' => '377ABCAF271C',
    'psd' => '38425053',
    'sle' => '414376',
    'asx' => '3C',
    'xdr' => '3C',
    'dci' => '3C21646F63747970',
    'manifest' => '3C3F786D6C2076657273696F6E3D',
    'xml' => '3C3F786D6C2076657273696F6E3D22312E30223F3E',
    'msc' => 'D0CF11E0A1B11AE1',
    'fm' => '3C4D616B65724669',
    'mif' => '56657273696F6E20',
    'gid' => '4C4E0200',
    'hlp' => '4C4E0200',
    'dwg' => '41433130',
    'syw' => '414D594F',
    'abi' => '414F4C494E444558',
    'aby' => '414F4C4442',
    'bag' => '414F4C2046656564',
    'idx' => '5000000020000000',
    'ind' => '414F4C494458',
    'pfc' => '414F4C564D313030',
    'org' => '414F4C564D313030',
    'vcf' => '424547494E3A5643',
    'bin' => '424C4932323351',
    'bmp' => '424D',
    'dib' => '424D',
    'prc' => '424F4F4B4D4F4249',
    'bz2' => '425A68',
    'tar.bz2' => '425A68',
    'tbz2' => '425A68',
    'tb2' => '425A68',
    'rtd' => '43232B44A4434DA5',
    'cbd' => '434246494C45',
    'iso' => '4344303031',
    'clb' => '434F4D2B',
    'cpt' => '43505446494C45',
    'cru' => '43525553482076',
    'swf' => '465753',
    'ctf' => '436174616C6F6720',
    'dms' => '444D5321',
    'adf' => '5245564E554D3A2C',
    'dvr' => '445644',
    'ifo' => '445644',
    'cdr' => '52494646',
    'vcd' => '454E545259564344',
    'mdi' => '4550',
    'e01' => '4C5646090D0AFF00',
    'evtx' => '456C6646696C6500',
    'qbb' => '458600000600',
    'cpe' => '464158434F564552',
    'flv' => '464C56',
    'aiff' => '464F524D00',
    'eml' => '582D',
    'gif' => '47494638',
    'pat' => '47504154',
    'gx2' => '475832',
    'sh3' => '4848474231',
    'tif' => '4D4D002B',
    'tiff' => '4D4D002B',
    'mp3' => '494433',
    'koz' => '49443303000000',
    'crw' => '49491A0000004845',
    'cab' => '4D534346',
    'lit' => '49544F4C49544C53',
    'chi' => '49545346',
    'chm' => '49545346',
    'jar' => '5F27A889',
    'jg' => '4A47040E000000',
    'kgb' => '4B47425F61726368',
    'shd' => '68490000',
    'lnk' => '4C00000001140200',
    'obj' => '80',
    'pdb' => 'ACED000573720012',
    'mar' => '4D41723000',
    'dmp' => '504147454455',
    'hdmp' => '4D444D5093A7',
    'mls' => '4D563243',
    'mmf' => '4D4D4D440000',
    'nvram' => '4D52564E',
    'ppz' => '4D534346',
    'snp' => '4D534346',
    'tlb' => '4D53465402000100',
    'dvf' => '4D535F564F494345',
    'msv' => '4D535F564F494345',
    'mid' => '4D546864',
    'midi' => '4D546864',
    'dsn' => '4D56',
    'com' => 'EB',
    'dll' => '4D5A',
    'drv' => '4D5A',
    'exe' => '4D5A',
    'pif' => '4D5A',
    'qts' => '4D5A',
    'qtx' => '4D5A',
    'sys' => 'FFFFFFFF',
    'acm' => '4D5A',
    'ax' => '4D5A900003000000',
    'cpl' => 'DCDC',
    'fon' => '4D5A',
    'ocx' => '4D5A',
    'olb' => '4D5A',
    'scr' => '4D5A',
    'vbx' => '4D5A',
    'vxd' => '4D5A',
    '386' => '4D5A',
    'api' => '4D5A900003000000',
    'flt' => '76323030332E3130',
    'zap' => '4D5A90000300000004000000FFFF',
    'sln' => '4D6963726F736F66742056697375616C',
    'jnt' => '4E422A00',
    'jtp' => '4E422A00',
    'cod' => '4E616D653A20',
    'dbf' => '4F504C4461746162',
    'oga' => '4F67675300020000',
    'ogg' => '4F67675300020000',
    'ogv' => '4F67675300020000',
    'ogx' => '4F67675300020000',
    'dw4' => '4F7B',
    'pgm' => '50350A',
    'pax' => '504158',
    'pgd' => '504750644D41494E',
    'img' => 'EB3C902A',
    'zip' => '504B0304140000',
    'docx' => '504B030414000600',
    'pptx' => '504B030414000600',
    'xlsx' => '504B030414000600',
    'kwd' => '504B0304',
    'odt' => '504B0304',
    'odp' => '504B0304',
    'ott' => '504B0304',
    'sxc' => '504B0304',
    'sxd' => '504B0304',
    'sxi' => '504B0304',
    'sxw' => '504B0304',
    'wmz' => '504B0304',
    'xpi' => '504B0304',
    'xps' => '504B0304',
    'xpt' => '5850434F4D0A5479',
    'grp' => '504D4343',
    'qemu' => '514649',
    'abd' => '5157205665722E20',
    'qsd' => '5157205665722E20',
    'reg' => 'FFFE',
    'sud' => '52454745444954',
    'ani' => '52494646',
    'cmx' => '52494646',
    'ds4' => '52494646',
    '4xm' => '52494646',
    'avi' => '52494646',
    'cda' => '52494646',
    'qcp' => '52494646',
    'rmi' => '52494646',
    'wav' => '52494646',
    'cap' => '58435000',
    'rar' => '526172211A0700',
    'ast' => '5343486C',
    'shw' => '53484F57',
    'cpi' => 'FF464F4E54',
    'sit' => '5374756666497420',
    'sdr' => '534D415254445257',
    'cnv' => '53514C4F434F4E56',
    'cal' => 'B5A2B0B3B3B0A5B5',
    'info' => 'E310000100000000',
    'uce' => '55434558',
    'ufa' => '554641C6D2C1',
    'pch' => '564350434830',
    'ctl' => '56455253494F4E20',
    'ws2' => '575332303030',
    'lwp' => '576F726450726F',
    'bdr' => '5854',
    'zoo' => '5A4F4F20',
    'ecf' => '5B47656E6572616C',
    'vcw' => '5B4D535643',
    'dun' => '5B50686F6E655D',
    'sam' => '5B7665725D',
    'cpx' => '5B57696E646F7773',
    'cfg' => '5B666C7473696D2E',
    'cas' => '5F434153455F',
    'cbk' => '5F434153455F',
    'arj' => '60EA',
    'vhd' => '636F6E6563746978',
    'csh' => '6375736800000002',
    'p10' => '64000000',
    'dex' => '6465780A30303900',
    'dsw' => '64737766696C65',
    'flac' => '664C614300000022',
    'dbb' => '6C33336C',
    'acd' => '72696666',
    'ram' => '727473703A2F2F',
    'dmg' => '78',
    'lgc' => '7B0D0A6F20',
    'lgd' => '7B0D0A6F20',
    'pwi' => '7B5C707769',
    'rtf' => '7B5C72746631',
    'psp' => '7E424B00',
    'wab' => '9CCBCB8D1375D211',
    'wpf' => '81CDAB',
    'png' => '89504E470D0A1A0A',
    'aw' => '8A0109000000E108',
    'hap' => '91334846',
    'skr' => '9501',
    'gpg' => '99',
    'pkr' => '9901',
    'qdf' => 'AC9EBD8F0000',
    'pwl' => 'E3828596',
    'dcx' => 'B168DE3A',
    'tib' => 'B46E6844',
    'acs' => 'C3ABCDAB',
    'lbk' => 'C8007900',
    'class' => 'CAFEBABE',
    'dbx' => 'CFAD12FE',
    'dot' => 'D0CF11E0A1B11AE1',
    'pps' => 'D0CF11E0A1B11AE1',
    'ppt' => 'D0CF11E0A1B11AE1',
    'xla' => 'D0CF11E0A1B11AE1',
    'xls' => 'D0CF11E0A1B11AE1',
    'wiz' => 'D0CF11E0A1B11AE1',
    'ac_' => 'D0CF11E0A1B11AE1',
    'adp' => 'D0CF11E0A1B11AE1',
    'apr' => 'D0CF11E0A1B11AE1',
    'mtw' => 'D0CF11E0A1B11AE1',
    'opt' => 'D0CF11E0A1B11AE1',
    'pub' => 'D0CF11E0A1B11AE1',
    'rvt' => 'D0CF11E0A1B11AE1',
    'sou' => 'D0CF11E0A1B11AE1',
    'spo' => 'D0CF11E0A1B11AE1',
    'vsd' => 'D0CF11E0A1B11AE1',
    'wps' => 'D0CF11E0A1B11AE1',
    'ftr' => 'D20A0000',
    'arl' => 'D42A',
    'aut' => 'D42A',
    'wmf' => 'D7CDC69A',
    'efx' => 'DCFE',
    'one' => 'E4525C7B8CD8A74D',
    'rpm' => 'EDABEEDB',
    'gho' => 'FEEF',
    'ghs' => 'FEEF',
    'wp' => 'FF575043',
    'wpd' => 'FF575043',
    'wpg' => 'FF575043',
    'wpp' => 'FF575043',
    'wp5' => 'FF575043',
    'wp6' => 'FF575043',
    'jfif' => 'FFD8FF',
    'jpe' => 'FFD8FF',
    'jpeg' => 'FFD8FF',
    'jpg' => 'FFD8FF',
    'mof' => 'FFFE23006C006900',
    'ipa' => '504B03040A',
    );
    /**
    * 检查文件类型
    *
    * @param string $filePath 文件路径
    * @param string $fileExt 文件扩展名
    *
    * @return boolean
    */
    public static function validation($filePath, $fileExt)
    {
    // 文件格式未知
    if (!isset(self::$_fileFormats[$fileExt]))
    {
    return false;
    }
    $length = strlen(self::$_fileFormats[$fileExt]);
    $bin = self::_readFile($filePath, $length);
    $fileHead = @unpack("H{$length}", $bin);
    // 判断文件头
    if (strtolower(self::$_fileFormats[$fileExt]) == $fileHead[1])
    {
    return true;
    }
    return false;
    }
    /**
    * 读取文件内容
    *
    * @param string $filePath 文件路径
    * @param integer $size
    *
    * @return string
    */
    private function _readFile($filePath, $size)
    {
    $file = fopen($filePath, "rb");
    $bin = fread($file, $size);
    fclose($file);
    return $bin;
    }
    }//调用代码
    require './class_filetypevalidation.php';
    // 文件路径
    $filePath = "D:/test.png";
    $x = FileTypeValidation::validation($filePath, 'zip');
    var_dump($x); 
      

  2.   

    收藏,很难得 看到 PHP 的帖子顶到首页
      

  3.   

    'jp2' => '0000000C6A502020',
    请问 0000000C6A502020  是啥来的呢
      

  4.   

    google "file signature"
    能找到很多文件类型信息
      

  5.   

    <?php
    /**
    * 检证文件类型类
    *
    * @author Silver
    */
    class FileTypeValidation
    {
    // 文件类型,不同的头信息
    private static $_fileFormats = Array(
    'jp2' => '0000000C6A502020',
    '3gp' => '0000002066747970',
    '3gp5' => '0000001866747970',
    'm4a' => '00000020667479704D3441',
    'ico' => '00000100',
    'spl' => '00000100',
    'vob' => '000001BA',
    'cur' => '00000200',
    'wb2' => '00000200',
    'wk1' => '0000020006040600',
    'wk3' => '00001A0000100400',
    'wk4' => '00001A0002100400',
    'wk5' => '00001A0002100400',
    '123' => '00001A00051004',
    'qxd' => '00004D4D585052',
    'mdf' => '010F0000',
    'tr1' => '0110',
    'rgb' => '01DA01010003',
    'drw' => '07',
    'dss' => '02647373',
    'dat' => 'A90D000000000000',
    'db3' => '03',
    'qph' => '03000000',
    'adx' => '80000020031204',
    'db4' => '04',
    'n' => 'FFFE0000',
    'a' => 'FFFE0000',
    'skf' => '07534B46',
    'dtd' => '0764743264647464',
    'db' => 'D0CF11E0A1B11AE1',
    'pcx' => '0A050101',
    'mp' => '0CED',
    'doc' => 'D0CF11E0A1B11AE1',
    'nri' => '0E4E65726F49534F',
    'wks' => 'FF00020004040554',
    'pf' => '1100000053434341',
    'ntf' => '4E49544630',
    'nsf' => '4E45534D1A01',
    'arc' => '41724301',
    'pak' => '5041434B',
    'eth' => '1A350100',
    'mkv' => '1A45DFA393428288',
    'ws' => '1D7D',
    'gz' => '1F8B08',
    'tar.z' => '1FA0',
    'ain' => '2112',
    'lib' => '213C617263683E0A',
    'msi' => 'D0CF11E0A1B11AE1',
    'vmdk' => '4B444D',
    'dsp' => '23204D6963726F73',
    'amr' => '2321414D52',
    'hdr' => '49536328',
    'sav' => '24464C3240282329',
    'eps' => 'C5D0D3C6',
    'pdf' => '25504446',
    'fdf' => '25504446',
    'hqx' => '2854686973206669',
    'log' => '2A2A2A2020496E73',
    'ivr' => '2E524543',
    'rm' => '2E524D46',
    'rmvb' => '2E524D46',
    'ra' => '2E7261FD00',
    'au' => '646E732E',
    'cat' => '30',
    'evt' => '300000004C664C65',
    'asf' => '3026B2758E66CF11',
    'wma' => '3026B2758E66CF11',
    'wmv' => '3026B2758E66CF11',
    'wri' => 'BE000000AB',
    '7z' => '377ABCAF271C',
    'psd' => '38425053',
    'sle' => '414376',
    'asx' => '3C',
    'xdr' => '3C',
    'dci' => '3C21646F63747970',
    'manifest' => '3C3F786D6C2076657273696F6E3D',
    'xml' => '3C3F786D6C2076657273696F6E3D22312E30223F3E',
    'msc' => 'D0CF11E0A1B11AE1',
    'fm' => '3C4D616B65724669',
    'mif' => '56657273696F6E20',
    'gid' => '4C4E0200',
    'hlp' => '4C4E0200',
    'dwg' => '41433130',
    'syw' => '414D594F',
    'abi' => '414F4C494E444558',
    'aby' => '414F4C4442',
    'bag' => '414F4C2046656564',
    'idx' => '5000000020000000',
    'ind' => '414F4C494458',
    'pfc' => '414F4C564D313030',
    'org' => '414F4C564D313030',
    'vcf' => '424547494E3A5643',
    'bin' => '424C4932323351',
    'bmp' => '424D',
    'dib' => '424D',
    'prc' => '424F4F4B4D4F4249',
    'bz2' => '425A68',
    'tar.bz2' => '425A68',
    'tbz2' => '425A68',
    'tb2' => '425A68',
    'rtd' => '43232B44A4434DA5',
    'cbd' => '434246494C45',
    'iso' => '4344303031',
    'clb' => '434F4D2B',
    'cpt' => '43505446494C45',
    'cru' => '43525553482076',
    'swf' => '465753',
    'ctf' => '436174616C6F6720',
    'dms' => '444D5321',
    'adf' => '5245564E554D3A2C',
    'dvr' => '445644',
    'ifo' => '445644',
    'cdr' => '52494646',
    'vcd' => '454E545259564344',
    'mdi' => '4550',
    'e01' => '4C5646090D0AFF00',
    'evtx' => '456C6646696C6500',
    'qbb' => '458600000600',
    'cpe' => '464158434F564552',
    'flv' => '464C56',
    'aiff' => '464F524D00',
    'eml' => '582D',
    'gif' => '47494638',
    'pat' => '47504154',
    'gx2' => '475832',
    'sh3' => '4848474231',
    'tif' => '4D4D002B',
    'tiff' => '4D4D002B',
    'mp3' => '494433',
    'koz' => '49443303000000',
    'crw' => '49491A0000004845',
    'cab' => '4D534346',
    'lit' => '49544F4C49544C53',
    'chi' => '49545346',
    'chm' => '49545346',
    'jar' => '5F27A889',
    'jg' => '4A47040E000000',
    'kgb' => '4B47425F61726368',
    'shd' => '68490000',
    'lnk' => '4C00000001140200',
    'obj' => '80',
    'pdb' => 'ACED000573720012',
    'mar' => '4D41723000',
    'dmp' => '504147454455',
    'hdmp' => '4D444D5093A7',
    'mls' => '4D563243',
    'mmf' => '4D4D4D440000',
    'nvram' => '4D52564E',
    'ppz' => '4D534346',
    'snp' => '4D534346',
    'tlb' => '4D53465402000100',
    'dvf' => '4D535F564F494345',
    'msv' => '4D535F564F494345',
    'mid' => '4D546864',
    'midi' => '4D546864',
    'dsn' => '4D56',
    'com' => 'EB',
    'dll' => '4D5A',
    'drv' => '4D5A',
    'exe' => '4D5A',
    'pif' => '4D5A',
    'qts' => '4D5A',
    'qtx' => '4D5A',
    'sys' => 'FFFFFFFF',
    'acm' => '4D5A',
    'ax' => '4D5A900003000000',
    'cpl' => 'DCDC',
    'fon' => '4D5A',
    'ocx' => '4D5A',
    'olb' => '4D5A',
    'scr' => '4D5A',
    'vbx' => '4D5A',
    'vxd' => '4D5A',
    '386' => '4D5A',
    'api' => '4D5A900003000000',
    'flt' => '76323030332E3130',
    'zap' => '4D5A90000300000004000000FFFF',
    'sln' => '4D6963726F736F66742056697375616C',
    'jnt' => '4E422A00',
    'jtp' => '4E422A00',
    'cod' => '4E616D653A20',
    'dbf' => '4F504C4461746162',
    'oga' => '4F67675300020000',
    'ogg' => '4F67675300020000',
    'ogv' => '4F67675300020000',
    'ogx' => '4F67675300020000',
    'dw4' => '4F7B',
    'pgm' => '50350A',
    'pax' => '504158',
    'pgd' => '504750644D41494E',
    'img' => 'EB3C902A',
    'zip' => '504B0304140000',
    'docx' => '504B030414000600',
    'pptx' => '504B030414000600',
    'xlsx' => '504B030414000600',
    'kwd' => '504B0304',
    'odt' => '504B0304',
    'odp' => '504B0304',
    'ott' => '504B0304',
    'sxc' => '504B0304',
    'sxd' => '504B0304',
    'sxi' => '504B0304',
    'sxw' => '504B0304',
    'wmz' => '504B0304',
    'xpi' => '504B0304',
    'xps' => '504B0304',
    'xpt' => '5850434F4D0A5479',
    'grp' => '504D4343',
    'qemu' => '514649',
    'abd' => '5157205665722E20',
    'qsd' => '5157205665722E20',
    'reg' => 'FFFE',
    'sud' => '52454745444954',
    'ani' => '52494646',
    'cmx' => '52494646',
    'ds4' => '52494646',
    '4xm' => '52494646',
    'avi' => '52494646',
    'cda' => '52494646',
    'qcp' => '52494646',
    'rmi' => '52494646',
    'wav' => '52494646',
    'cap' => '58435000',
    'rar' => '526172211A0700',
    'ast' => '5343486C',
    'shw' => '53484F57',
    'cpi' => 'FF464F4E54',
    'sit' => '5374756666497420',
    'sdr' => '534D415254445257',
    'cnv' => '53514C4F434F4E56',
    'cal' => 'B5A2B0B3B3B0A5B5',
    'info' => 'E310000100000000',
    'uce' => '55434558',
    'ufa' => '554641C6D2C1',
    'pch' => '564350434830',
    'ctl' => '56455253494F4E20',
    'ws2' => '575332303030',
    'lwp' => '576F726450726F',
    'bdr' => '5854',
    'zoo' => '5A4F4F20',
    'ecf' => '5B47656E6572616C',
    'vcw' => '5B4D535643',
    'dun' => '5B50686F6E655D',
    'sam' => '5B7665725D',
    'cpx' => '5B57696E646F7773',
    'cfg' => '5B666C7473696D2E',
    'cas' => '5F434153455F',
    'cbk' => '5F434153455F',
    'arj' => '60EA',
    'vhd' => '636F6E6563746978',
    'csh' => '6375736800000002',
    'p10' => '64000000',
    'dex' => '6465780A30303900',
    'dsw' => '64737766696C65',
    'flac' => '664C614300000022',
    'dbb' => '6C33336C',
    'acd' => '72696666',
    'ram' => '727473703A2F2F',
    'dmg' => '78',
    'lgc' => '7B0D0A6F20',
    'lgd' => '7B0D0A6F20',
    'pwi' => '7B5C707769',
    'rtf' => '7B5C72746631',
    'psp' => '7E424B00',
    'wab' => '9CCBCB8D1375D211',
    'wpf' => '81CDAB',
    'png' => '89504E470D0A1A0A',
    'aw' => '8A0109000000E108',
    'hap' => '91334846',
    'skr' => '9501',
    'gpg' => '99',
    'pkr' => '9901',
    'qdf' => 'AC9EBD8F0000',
    'pwl' => 'E3828596',
    'dcx' => 'B168DE3A',
    'tib' => 'B46E6844',
    'acs' => 'C3ABCDAB',
    'lbk' => 'C8007900',
    'class' => 'CAFEBABE',
    'dbx' => 'CFAD12FE',
    'dot' => 'D0CF11E0A1B11AE1',
    'pps' => 'D0CF11E0A1B11AE1',
    'ppt' => 'D0CF11E0A1B11AE1',
    'xla' => 'D0CF11E0A1B11AE1',
    'xls' => 'D0CF11E0A1B11AE1',
    'wiz' => 'D0CF11E0A1B11AE1',
    'ac_' => 'D0CF11E0A1B11AE1',
    'adp' => 'D0CF11E0A1B11AE1',
    'apr' => 'D0CF11E0A1B11AE1',
    'mtw' => 'D0CF11E0A1B11AE1',
    'opt' => 'D0CF11E0A1B11AE1',
    'pub' => 'D0CF11E0A1B11AE1',
    'rvt' => 'D0CF11E0A1B11AE1',
    'sou' => 'D0CF11E0A1B11AE1',
    'spo' => 'D0CF11E0A1B11AE1',
    'vsd' => 'D0CF11E0A1B11AE1',
    'wps' => 'D0CF11E0A1B11AE1',
    'ftr' => 'D20A0000',
    'arl' => 'D42A',
    'aut' => 'D42A',
    'wmf' => 'D7CDC69A',
    'efx' => 'DCFE',
    'one' => 'E4525C7B8CD8A74D',
    'rpm' => 'EDABEEDB',
    'gho' => 'FEEF',
    'ghs' => 'FEEF',
    'wp' => 'FF575043',
    'wpd' => 'FF575043',
    'wpg' => 'FF575043',
    'wpp' => 'FF575043',
    'wp5' => 'FF575043',
    'wp6' => 'FF575043',
    'jfif' => 'FFD8FF',
    'jpe' => 'FFD8FF',
    'jpeg' => 'FFD8FF',
    'jpg' => 'FFD8FF',
    'mof' => 'FFFE23006C006900',
    'ipa' => '504B03040A',
    );
    /**
    * 检查文件类型
    *
    * @param string $filePath 文件路径
    * @param string $fileExt 文件扩展名
    *
    * @return boolean
    */
    public static function validation($filePath, $fileExt)
    {
    // 文件格式未知
    if (!isset(self::$_fileFormats[$fileExt]))
    {
    return false;
    }
    $length = strlen(self::$_fileFormats[$fileExt]);
    $bin = self::_readFile($filePath, $length);
    $fileHead = @unpack("H{$length}", $bin);
    // 判断文件头
    if (strtolower(self::$_fileFormats[$fileExt]) == $fileHead[1])
    {
    return true;
    }
    return false;
    }
    /**
    * 读取文件内容
    *
    * @param string $filePath 文件路径
    * @param integer $size
    *
    * @return string
    */
    private function _readFile($filePath, $size)
    {
    $file = fopen($filePath, "rb");
    $bin = fread($file, $size);
    fclose($file);
    return $bin;
    }
    }
    ?>调用
    . 代码如下:require './class_filetypevalidation.php';
    // 文件路径
    $filePath = "D:/test.png";
    $x = FileTypeValidation::validation($filePath, 'zip');
    var_dump($x);  
      

  6.   

    这个明显不行。'jfif' => 'FFD8FF',
    'jpe' => 'FFD8FF',
    'jpeg' => 'FFD8FF',
    'jpg' => 'FFD8FF',
    这里就是硬伤。不信你给个常见的jpeg文件,立马就给你误判断成了jfif。