如何通過(guò)文件頭準(zhǔn)確識(shí)別PHP上傳的文件類(lèi)型

如何通過(guò)文件頭準(zhǔn)確識(shí)別PHP上傳的文件類(lèi)型,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶(hù)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、申請(qǐng)域名網(wǎng)站空間、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶(hù)提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶(hù)的口碑塑造優(yōu)易品牌,攜手廣大客戶(hù),共同發(fā)展進(jìn)步。

<?php      
                
/**
 * 通過(guò)文件名,獲得文件類(lèi)型*    
 * @version 0.1     
 * $filename="d:/1.png";echo cFileTypeCheck::getFileType($filename); 打印:png     
 */

class cFileTypeCheck     
{     
    private static $_TypeList=array();     
    private static $CheckClass=null;     
    private function __construct($filename)     
    {     
        self::$_TypeList=$this->getTypeList();     
    }     
                
    /**     
     * 處理文件類(lèi)型映射關(guān)系表*     
     *     
     * @param string $filename 文件類(lèi)型     
     * @return string 文件類(lèi)型,沒(méi)有找到返回:other     
     */
    private function _getFileType($filename)     
    {     
        $filetype="other";     
        if(!file_exists($filename)) throw new Exception("no found file!");     
        $file = @fopen($filename,"rb");     
        if(!$file) throw new Exception("file refuse!");     
        $bin = fread($file, 15); //只讀15字節(jié) 各個(gè)不同文件類(lèi)型,頭信息不一樣。     
        fclose($file);     
                        
        $typelist=self::$_TypeList;     
        foreach ($typelist as $v)     
        {     
            $blen=strlen(pack("H*",$v[0])); //得到文件頭標(biāo)記字節(jié)數(shù)     
            $tbin=substr($bin,0,intval($blen)); ///需要比較文件頭長(zhǎng)度     
                            
            if(strtolower($v[0])==strtolower(array_shift(unpack("H*",$tbin))))      
            {     
                return $v[1];     
            }     
        }     
        return $filetype;     
    }     
                    
    /**     
     * 得到文件頭與文件類(lèi)型映射表*     
     *     
     * @return array array(array('key',value)...)     
     */
    public function getTypeList()     
    {     
        return array(array("FFD8FFE1","jpg"),     
        array("89504E47","png"),     
        array("47494638","gif"),     
        array("49492A00","tif"),     
        array("424D","bmp"),     
        array("41433130","dwg"),     
        array("38425053","psd"),     
        array("7B5C727466","rtf"),     
        array("3C3F786D6C","xml"),     
        array("68746D6C3E","html"),     
        array("44656C69766572792D646174","eml"),     
        array("CFAD12FEC5FD746F","dbx"),     
        array("2142444E","pst"),     
        array("D0CF11E0","xls/doc"),     
        array("5374616E64617264204A","mdb"),     
        array("FF575043","wpd"),     
        array("252150532D41646F6265","eps/ps"),     
        array("255044462D312E","pdf"),     
        array("E3828596","pwl"),     
        array("504B0304","zip"),     
        array("52617221","rar"),     
        array("57415645","wav"),     
        array("41564920","avi"),     
        array("2E7261FD","ram"),     
        array("2E524D46","rm"),     
        array("000001BA","mpg"),     
        array("000001B3","mpg"),     
        array("6D6F6F76","mov"),     
        array("3026B2758E66CF11","asf"),     
        array("4D546864","mid"));     
    }     
                
    public static function getFileType($filename)     
    {     
        if(!self::$CheckClass) self::$CheckClass=new self($filename);     
        $class=self::$CheckClass;     
        return $class->_getFileType($filename);     
    }     
}

調(diào)用方法:

$filename="d:/1.png"; 
echo $filename,"\t",cFileTypeCheck::getFileType($filename),"\r\n"; 
$filename="d:/test.doc"; 
echo $filename,"\t",cFileTypeCheck::getFileType($filename),"\r\n";

輸出:

d:/1.png    png 
d:/test.doc    xls/doc

通過(guò)WinHex軟件來(lái)獲取文件的頭信息: 可以看到:png 文件,頭是4個(gè)字節(jié)(頭標(biāo)記是多少字節(jié)需要自己查相關(guān)資料確定),對(duì)應(yīng)是:89504E47

看完上述內(nèi)容,你們掌握如何通過(guò)文件頭準(zhǔn)確識(shí)別PHP上傳的文件類(lèi)型的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)站名稱(chēng):如何通過(guò)文件頭準(zhǔn)確識(shí)別PHP上傳的文件類(lèi)型
文章路徑:http://m.kartarina.com/article8/gspgop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)服務(wù)器托管網(wǎng)站內(nèi)鏈App開(kāi)發(fā)靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
主站蜘蛛池模板: 中文字幕av无码不卡免费| 无码人妻丰满熟妇片毛片| 少妇性饥渴无码A区免费 | 亚洲国产精品无码久久青草| 天堂无码在线观看| 久久精品无码专区免费东京热 | 国产精品成人99一区无码| 亚洲国产精品无码专区影院| 极品无码国模国产在线观看| 日韩精品无码专区免费播放| 亚洲精品无码成人片在线观看 | 亚洲日韩VA无码中文字幕| 免费无码又爽又刺激高潮视频| 一本一道中文字幕无码东京热| 亚洲精品偷拍无码不卡av| 国产成年无码久久久久毛片| 日日摸日日碰人妻无码| 亚洲精品无码久久久久秋霞| 亚洲AV人无码综合在线观看| 黄A无码片内射无码视频| 国产嫖妓一区二区三区无码| 无码丰满熟妇juliaann与黑人| 无码人妻精品一区二区三18禁 | 自拍偷在线精品自拍偷无码专区| 亚洲大尺度无码无码专线一区| 免费无码中文字幕A级毛片| 久久精品无码精品免费专区| 国产精品毛片无码| 无码日韩人妻AV一区免费l| 无码人妻aⅴ一区二区三区| 亚洲精品无码你懂的| 人妻少妇看A偷人无码电影| 久久国产亚洲精品无码| 久久亚洲AV成人无码软件| 午夜福利av无码一区二区| 无码久久精品国产亚洲Av影片| 无码人妻精品一区二区三区久久 | 无码国产精品一区二区免费vr | 久久久无码精品亚洲日韩蜜桃| 国产亚洲大尺度无码无码专线| 国精品无码一区二区三区左线|