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 />';
}
本例輸出結(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
下面代碼就展示了自己通過讀取文件頭信息來識別文件的真實類型。
復(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
相關(guān)文章
PHP生成指定范圍內(nèi)的N個不重復(fù)的隨機數(shù)
今天小編就為大家分享一篇關(guān)于PHP生成指定范圍內(nèi)的N個不重復(fù)的隨機數(shù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03php處理json格式數(shù)據(jù)經(jīng)典案例總結(jié)
這篇文章主要介紹了php處理json格式數(shù)據(jù)的方法,詳細講述了json格式數(shù)據(jù)的概念與用法,并結(jié)合經(jīng)典案例總結(jié)分析了php操作json格式數(shù)據(jù)的常用技巧,需要的朋友可以參考下2016-05-05php設(shè)計模式 State (狀態(tài)模式)
允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它所屬的類2011-06-06PHP7原生MySQL數(shù)據(jù)庫操作實現(xiàn)代碼
php7已經(jīng)沒有mysql這個擴展了,好多貼還是按照以前的方法講,讓我這個新手來回找了好多遍都沒找到mysql,php7用后面兩個鏈接數(shù)據(jù)庫,千萬不要傻傻去找也不要去來回拷貝什么dll之類的2020-07-07php中在PDO中使用事務(wù)(Transaction)
事務(wù) (Transaction) 是操作數(shù)據(jù)庫中很重要的一個功能, 它可以讓你預(yù)定一條, 或者一系列 SQL 語句, 然后一起執(zhí)行2011-05-05PHP JSAPI調(diào)支付API實現(xiàn)微信支付功能詳解
本人最近做了微信支付開發(fā),是第一次接觸,其中走了很多彎路,遇到的問題也很多。為了讓和我一樣的新人不再遇到類似的問題,我把我的開發(fā)步驟和問題寫出來以供參考,這篇文章主要介紹了PHP JSAPI調(diào)支付API實現(xiàn)微信支付功能2022-11-11php的instanceof和判斷閉包Closure操作示例
這篇文章主要介紹了php的instanceof和判斷閉包Closure操作,結(jié)合實例形式分析了PHP使用instanceof判斷類實例以及判斷閉包Closure相關(guān)操作技巧,需要的朋友可以參考下2020-01-01