我这里写了一个验证类,是通过文件头来判断文件格式.(也不是百分之百安全,如果用户伪造了文件头,也能通过验证)
复制代码 代码如下:
<?php
/**
* 检证文件类型类
*
* @author Silver
*/
class FileTypeValidation
{
// 文件类型,不同的头信息
private static $_fileFormats = Array(
"jp2" => "0000000C6A502020",<br/> "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);