在用PHP上傳文件時一般限制可上傳的文件類型的做法是通過文件的後綴進行判斷,但這樣的做法存在缺點,相信所有的phper們都是知道的,下面介紹一個可以從最根本上判斷用戶上傳的文件類型的函數。
簡要分析一下本函數通過文件頭信息實現判斷上傳文件類型的過程思路,首先使用用fopen()函數打開上傳的文件,然後通過fread()讀取文件的前2個字節。得到的內容會是二進制的字符串,為了能在程序代碼中做判斷,這裡使用的是unpack()函數把二進制數據轉換成十進制數字的字符串(unpack()函數主要用於二進制操作,具體用法可參見php幫助文檔,這裡做解釋!),然後進行判斷即可。
下面直接把案例代碼貼出來吧:
$filename='http:///logo.gif';
$file=fopen($filename,'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';
break;
}
echo '文件類型:'.$fileType.' 文件頭信息:'.$typeCode;
*