/* 读取图片文件的真实后缀名 */
<?php
//根据文件的内容来判断图片类型,而不是根据文件的后缀名来判断图片的类型,因为图片的后缀名可以修改的
//图片的内容是二进制的;打开图片文件,默认以16进制打开的。
function get_file_type($file)
{
$file = fopen($file, 'rb');
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'] . $strInfo['chars2']);
$fileType = '';
switch($typeCode)
{
case 7790: $fileType = 'exe'; break;
case 7784: $fileType = 'midi'; break;
case 8297: $fileType = 'rar'; break;
case 255216: $fileType = 'jpg'; break;
case 7173: $fileType = 'gif'; break;
case 6677: $fileType = 'bmp'; break;
case 13780: $fileType = 'png'; break;
default: echo 'unknown';
}
echo $fileType;
}
function get_file_type2($file)
{
$header = file_get_contents($file, 0, NULL, 0, 5);
// echo bin2hex($header);
if ($header{0}.$header{1} == "\x89\x50")
{
echo 'png';
}
if ($header{0}.$header{1} == "\xff\xd8")
{
echo 'jpeg';
}
if ($header{0}.$header{1}.$header{2} == "\x47\x49\x46")
{
if ($header{4} == "\x37")
{
echo 'gif87';
}
if ($header{4} == "\x39")
{
echo 'gif89';
}
}
}
echo get_file_type('C:\wamp\php.exe');