PHP取二進制文件頭快速判斷文件類型的實現(xiàn)代碼
更新時間:2013年08月05日 09:31:54 作者:
以下代碼就展示了自己通過讀取文件頭信息來識別文件的真實類型。需要的朋友可以過來參考下
一般我們都是按照文件擴展名來判斷文件類型,但是這個很不靠譜,輕易就通過修改擴展名來躲避了,一般必須要讀取文件信息來識別,PHP擴展中提供了類似 exif_imagetype 這樣的函數(shù)讀取圖片類的文件類型,但是很多時候擴展不一定安裝了,有時候就需要自己來實現(xiàn)識別文件類型的工作。
下面代碼就展示了自己通過讀取文件頭信息來識別文件的真實類型。
<?php
$files = array(
'c:\1.jpg',
'c:\1.png',
'c:\1.gif',
'c:\1.rar',
'c:\1.zip',
'c:\1.exe',
);
foreach ($files AS $file) {
$fp = fopen($file, "rb");
$bin = fread($fp, 2); //只讀2字節(jié)
fclose($fp);
$str_info = @unpack("C2chars", $bin);
$type_code = intval($str_info['chars1'].$str_info['chars2']);
$file_type = '';
switch ($type_code) {
case 7790:
$file_type = 'exe';
break;
case 7784:
$file_type = 'midi';
break;
case 8075:
$file_type = 'zip';
break;
case 8297:
$file_type = 'rar';
break;
case 255216:
$file_type = 'jpg';
break;
case 7173:
$file_type = 'gif';
break;
case 6677:
$file_type = 'bmp';
break;
case 13780:
$file_type = 'png';
break;
default:
$file_type = 'unknown';
break;
}
echo $file , ' type: <b>', $file_type, '</b> code:<b>', $type_code, '</b><br />';
}
本例輸出結果
c:\1.jpg type: jpg code:255216
c:\1.png type: png code:13780
c:\1.gif type: gif code:7173
c:\1.rar type: rar code:8297
c:\1.zip type: zip code:8075
c:\1.exe type: exe code:7790
下面代碼就展示了自己通過讀取文件頭信息來識別文件的真實類型。
復制代碼 代碼如下:
<?php
$files = array(
'c:\1.jpg',
'c:\1.png',
'c:\1.gif',
'c:\1.rar',
'c:\1.zip',
'c:\1.exe',
);
foreach ($files AS $file) {
$fp = fopen($file, "rb");
$bin = fread($fp, 2); //只讀2字節(jié)
fclose($fp);
$str_info = @unpack("C2chars", $bin);
$type_code = intval($str_info['chars1'].$str_info['chars2']);
$file_type = '';
switch ($type_code) {
case 7790:
$file_type = 'exe';
break;
case 7784:
$file_type = 'midi';
break;
case 8075:
$file_type = 'zip';
break;
case 8297:
$file_type = 'rar';
break;
case 255216:
$file_type = 'jpg';
break;
case 7173:
$file_type = 'gif';
break;
case 6677:
$file_type = 'bmp';
break;
case 13780:
$file_type = 'png';
break;
default:
$file_type = 'unknown';
break;
}
echo $file , ' type: <b>', $file_type, '</b> code:<b>', $type_code, '</b><br />';
}
本例輸出結果
c:\1.jpg type: jpg code:255216
c:\1.png type: png code:13780
c:\1.gif type: gif code:7173
c:\1.rar type: rar code:8297
c:\1.zip type: zip code:8075
c:\1.exe type: exe code:7790
相關文章
phpStudy中升級MySQL版本到5.7.17的方法步驟
這篇文章主要給大家介紹了關于phpStudy中升級MySQL版本到5.7.17的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-08-08
備份mysql數(shù)據(jù)庫的php代碼(一個表一個文件)
用php實現(xiàn)的備份MySQL數(shù)據(jù)庫的代碼,需要的朋友可以參考下。2010-05-05
PHP里面把16進制的圖片數(shù)據(jù)顯示在html的img標簽上(實現(xiàn)方法)
下面小編就為大家?guī)硪黄狿HP里面把16進制的圖片數(shù)據(jù)顯示在html的img標簽上(實現(xiàn)方法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
實測在class的function中include的文件中非php的global全局環(huán)境
正如標題所言經測試的結果為:在class中include后,被include文件變量域已經變成func中了,非全局.但是可以通過global提升,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07

