PHP取二進(jìn)制文件頭快速判斷文件類(lèi)型的實(shí)現(xiàn)代碼
更新時(shí)間:2013年08月05日 09:31:54 作者:
以下代碼就展示了自己通過(guò)讀取文件頭信息來(lái)識(shí)別文件的真實(shí)類(lèi)型。需要的朋友可以過(guò)來(lái)參考下
一般我們都是按照文件擴(kuò)展名來(lái)判斷文件類(lèi)型,但是這個(gè)很不靠譜,輕易就通過(guò)修改擴(kuò)展名來(lái)躲避了,一般必須要讀取文件信息來(lái)識(shí)別,PHP擴(kuò)展中提供了類(lèi)似 exif_imagetype 這樣的函數(shù)讀取圖片類(lèi)的文件類(lèi)型,但是很多時(shí)候擴(kuò)展不一定安裝了,有時(shí)候就需要自己來(lái)實(shí)現(xiàn)識(shí)別文件類(lèi)型的工作。
下面代碼就展示了自己通過(guò)讀取文件頭信息來(lái)識(shí)別文件的真實(shí)類(lèi)型。
<?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 />';
}
本例輸出結(jié)果
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
下面代碼就展示了自己通過(guò)讀取文件頭信息來(lái)識(shí)別文件的真實(shí)類(lèi)型。
復(fù)制代碼 代碼如下:
<?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 />';
}
本例輸出結(jié)果
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 讀取文件頭判斷文件類(lèi)型的實(shí)現(xiàn)代碼
- PHP 基于文件頭的文件類(lèi)型驗(yàn)證類(lèi)函數(shù)
- php通過(guò)文件頭檢測(cè)文件類(lèi)型通用代碼類(lèi)(zip,rar等)
- php實(shí)現(xiàn)獲取文件mime類(lèi)型的方法
- PHP 文件類(lèi)型判斷代碼
- php文件類(lèi)型MIME對(duì)照表(比較全)
- php限制上傳文件類(lèi)型并保存上傳文件的方法
- php中header設(shè)置常見(jiàn)文件類(lèi)型的content-type
- PHP判斷上傳文件類(lèi)型的解決辦法
- PHP如何根據(jù)文件頭檢測(cè)文件類(lèi)型實(shí)例代碼
相關(guān)文章
phpStudy中升級(jí)MySQL版本到5.7.17的方法步驟
這篇文章主要給大家介紹了關(guān)于phpStudy中升級(jí)MySQL版本到5.7.17的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08
備份mysql數(shù)據(jù)庫(kù)的php代碼(一個(gè)表一個(gè)文件)
用php實(shí)現(xiàn)的備份MySQL數(shù)據(jù)庫(kù)的代碼,需要的朋友可以參考下。2010-05-05
PHP里面把16進(jìn)制的圖片數(shù)據(jù)顯示在html的img標(biāo)簽上(實(shí)現(xiàn)方法)
下面小編就為大家?guī)?lái)一篇PHP里面把16進(jìn)制的圖片數(shù)據(jù)顯示在html的img標(biāo)簽上(實(shí)現(xiàn)方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
實(shí)測(cè)在class的function中include的文件中非php的global全局環(huán)境
正如標(biāo)題所言經(jīng)測(cè)試的結(jié)果為:在class中include后,被include文件變量域已經(jīng)變成func中了,非全局.但是可以通過(guò)global提升,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07
PHP實(shí)現(xiàn)基數(shù)排序的方法詳解
這篇文章主要介紹了PHP實(shí)現(xiàn)基數(shù)排序的方法,結(jié)合實(shí)例形式分析了基數(shù)排序的原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
docker中實(shí)現(xiàn)安裝php拓展步驟講解
這篇文章主要介紹了docker中實(shí)現(xiàn)安裝php拓展步驟講解,有不會(huì)安裝的同學(xué)可以跟著操作下2021-01-01

