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