亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP如何根據文件頭檢測文件類型實例代碼

2024-05-05 00:05:37
字體:
來源:轉載
供稿:網友

前言

什么是文件頭部Bom? 說白了,就是在保存文件的時候,文件前面會多出一串隱藏的字符,文件簽名一般都在文件的頭部,如果你用十六進制方式查看文件,你就可以看到文件的一些簽名信息。如用uestudio以十六進制方式查看zip格式的文件,其文件內容頭部有50 4B 03 04這樣的十六進制信息。同理jpg文件狀況有FF D8 FF E0 xx xx 4A 46這樣的十六進制信息,其實這此十六進制都是表示一些特殊字條。

php怎么樣驗證文件類型?

先來看一個簡單的方法:

<?phpfunction checkFileType($fileName){   $file = fopen($fileName, "rb");   $bin = fread($file, 2); //只讀2字節   fclose($file);  // C為無符號整數,網上搜到的都是c,為有符號整數,這樣會產生負數判斷不正常  $strInfo = @unpack("C2chars", $bin);  $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);   $fileType = '';  switch( $typeCode ) { case '255216': return $typeCode. ' : ' .'jpg'; break; case '7173': return $typeCode. ' : ' .'gif'; break; case '13780': return $typeCode. ' : ' .'png'; break; case '6677': return $typeCode. ' : ' .'bmp'; break; case '7790': return $typeCode. ' : ' .'exe'; break; case '7784': return $typeCode. ' : ' .'midi'; break; case '8297': return $typeCode. ' : ' .'rar'; break; default: return $typeCode. ' : ' .'Unknown'; break; } //return $typeCode; }$file_name = '11.doc';echo checkFileType($file_name);

下來提供一個類的實現:

<?php/*通過文件名,獲得文件類型* *@author chengmo QQ:8292669* *@copyright <a href="http://www.cnblogs.com/chengmo">http://www.cnblogs.com/chengmo</a> 2010-10-17 *@version 0.1 *$filename="d:/1.png";echo cFileTypeCheck::getFileType($filename); 打?。簆ng */class cFileTypeCheck{  private static $_TypeList=array();  private static $CheckClass=null;  private function __construct($filename)  {    self::$_TypeList=$this->getTypeList();  }  /**   *處理文件類型映射關系表*   *   * @param string $filename 文件類型   * @return string 文件類型,沒有找到返回: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字節 各個不同文件類型,頭信息不一樣。    fclose($file);    $typelist=self::$_TypeList;    foreach ($typelist as $v)    {      $blen=strlen(pack("H*",$v[0])); //得到文件頭標記字節數      $tbin=substr($bin,0,intval($blen)); ///需要比較文件頭長度      if(strtolower($v[0])==strtolower(array_shift(unpack("H*",$tbin))))      {        return $v[1];      }    }    return $filetype;  }  /**   *得到文件頭與文件類型映射表*   *   * @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);  }}$filename="22.jpg";echo $filename,"t",cFileTypeCheck::getFileType($filename),"rn";$filename="11.doc";echo $filename,"t",cFileTypeCheck::getFileType($filename),"rn";

或者可以這么檢測:

<?php$filename = '22.jpg';$extname = strtolower(substr($filename, strrpos($filename, '.') + 1));echo $extname.'<br />';$file = @fopen($filename, 'rb');  if ($file)  {    $str = @fread($file, 0x400); // 讀取前 1024 個字節 echo substr($str, 0, 4);    @fclose($file);  } if (substr($str, 0, 4) == 'MThd' && $extname != 'txt')    {      $format = 'mid';    }    elseif (substr($str, 0, 4) == 'RIFF' && $extname == 'wav')    {      $format = 'wav';    }    elseif (substr($str ,0, 3) == "/xFF/xD8/xFF")    {      $format = 'jpg';    }    elseif (substr($str ,0, 4) == 'GIF8' && $extname != 'txt')    {      $format = 'gif';    }    elseif (substr($str ,0, 8 ) == "/x89/x50/x4E/x47/x0D/x0A/x1A/x0A")    {      $format = 'png';    }    elseif (substr($str ,0, 2) == 'BM' && $extname != 'txt')    {      $format = 'bmp';    }    elseif ((substr($str ,0, 3) == 'CWS' || substr($str ,0, 3) == 'FWS') && $extname != 'txt')    {      $format = 'swf';    }    elseif (substr($str ,0, 4) == "/xD0/xCF/x11/xE0")    {  // D0CF11E == DOCFILE == Microsoft Office Document      if (substr($str,0x200,4) == "/xEC/xA5/xC1/x00" || $extname == 'doc')      {        $format = 'doc';      }      elseif (substr($str,0x200,2) == "/x09/x08" || $extname == 'xls')      {        $format = 'xls';      } elseif (substr($str,0x200,4) == "/xFD/xFF/xFF/xFF" || $extname == 'ppt')      {        $format = 'ppt';      }    } elseif (substr($str ,0, 4) == "PK/x03/x04")    {      $format = 'zip';    } elseif (substr($str ,0, 4) == 'Rar!' && $extname != 'txt')    {      $format = 'rar';    } elseif (substr($str ,0, 4) == "/x25PDF")    {      $format = 'pdf';    } elseif (substr($str ,0, 3) == "/x30/x82/x0A")    {      $format = 'cert';    } elseif (substr($str ,0, 4) == 'ITSF' && $extname != 'txt')    {      $format = 'chm';    } elseif (substr($str ,0, 4) == "/x2ERMF")    {      $format = 'rm';    } elseif ($extname == 'sql')    {      $format = 'sql';    } elseif ($extname == 'txt')    {      $format = 'txt';    } echo $format;

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美精品中文字幕在线| 亚洲国产精品成人av| 亚洲伊人久久综合| 91精品国产乱码久久久久久蜜臀| 国产第一区电影| 日韩欧美极品在线观看| 国产精品视频自在线| 日韩精品极品在线观看| 亚洲人成啪啪网站| 欧美精品久久久久久久久久| 国产在线视频一区| 精品一区二区电影| 成人黄色片在线| xxx一区二区| 国产精品午夜国产小视频| 久久天天躁狠狠躁夜夜爽蜜月| 97视频在线观看播放| 黄色一区二区在线| 日韩成人在线视频观看| 中文字幕精品久久久久| 91国产精品电影| 中文字幕久精品免费视频| 国产精品国产亚洲伊人久久| 欧美不卡视频一区发布| 97热精品视频官网| 亚洲色图在线观看| 91天堂在线观看| 91精品综合视频| 性欧美激情精品| 91免费视频网站| 久久久久久噜噜噜久久久精品| 欧美电影免费播放| 韩日欧美一区二区| 色综合久久久888| 91精品视频专区| 欧美人与性动交a欧美精品| 久久99精品久久久久久噜噜| 中文字幕免费国产精品| 精品福利在线看| 日韩高清电影好看的电视剧电影| 尤物九九久久国产精品的分类| 日韩精品丝袜在线| 狠狠躁天天躁日日躁欧美| 性亚洲最疯狂xxxx高清| 91精品国产综合久久香蕉922| 久久久在线免费观看| 91系列在线播放| 欧美片一区二区三区| 成人激情视频小说免费下载| 国产精品免费电影| 久久久精品美女| 欧美三级xxx| 亚洲人成电影网| 亚洲人成在线一二| 国产福利精品av综合导导航| 大伊人狠狠躁夜夜躁av一区| 国产精品第二页| 亚洲欧洲一区二区三区久久| 久久精品99久久香蕉国产色戒| 中文字幕在线成人| 国产精品午夜一区二区欲梦| 日韩成人中文字幕在线观看| 亚洲黄色有码视频| 日本成人在线视频网址| 色综合91久久精品中文字幕| 亚洲精品国精品久久99热一| 国产精品国产自产拍高清av水多| 91久久中文字幕| 亚洲国产精品大全| 亚洲精品久久久久久久久久久久| 91免费观看网站| 欧美精品video| 欧美精品免费在线观看| 亚洲国产天堂久久综合| 久久久精品一区二区| 97香蕉超级碰碰久久免费软件| 4438全国亚洲精品在线观看视频| 国产成人91久久精品| 97精品一区二区三区| 日本国产欧美一区二区三区| 欧美xxxx14xxxxx性爽| 国产成人精品视频在线| 亚洲欧美资源在线| 欧美一级淫片videoshd| 欧美中文字幕在线| 永久免费毛片在线播放不卡| 日韩高清欧美高清| 国产精品视频白浆免费视频| 日韩久久午夜影院| 亚洲欧美自拍一区| 91精品综合久久久久久五月天| 美女av一区二区三区| 亚洲国产欧美一区二区三区久久| 国产精品www网站| 欧美一区二区三区……| 亚洲丝袜av一区| 在线亚洲男人天堂| 欧美中文在线观看国产| 国产精品久久久久久久久久三级| 欧美日韩在线免费| 久久亚洲精品中文字幕冲田杏梨| 中文字幕在线精品| 亚洲欧洲视频在线| 国产一区玩具在线观看| 精品国产91久久久久久老师| 精品一区二区三区电影| 亚洲国产精品va在线看黑人| 高跟丝袜一区二区三区| 久久精品一区中文字幕| 久久精品99久久香蕉国产色戒| 国产精品久久久久久影视| 国产性猛交xxxx免费看久久| 欧美洲成人男女午夜视频| 国产精品69精品一区二区三区| 欧美日韩福利电影| 午夜剧场成人观在线视频免费观看| 欧美第一黄网免费网站| 久热精品在线视频| 日韩a**站在线观看| 亚洲一区二区免费| 另类少妇人与禽zozz0性伦| 4438全国成人免费| 欧美特黄级在线| 欧美精品九九久久| 日韩在线国产精品| 国产精品福利久久久| 久久夜精品va视频免费观看| 欧美国产乱视频| 少妇av一区二区三区| 欧美激情国产精品| 国产精品美女免费视频| 韩国福利视频一区| 一区二区三区动漫| 日韩成人中文字幕在线观看| 欧美在线激情视频| 亚洲国产欧美一区| 日韩欧美一区二区三区| 国产午夜精品视频免费不卡69堂| 中文字幕日韩在线播放| 欲色天天网综合久久| 91精品国产色综合久久不卡98口| 2019中文字幕在线免费观看| 欧美黄色www| 亚洲美女av在线播放| 97av在线视频免费播放| 国产精品丝袜高跟| 久久久久久久影视| 91免费精品视频| 国产精品一区二区电影| 精品国产1区2区| 久久精品99无色码中文字幕| 91中文精品字幕在线视频| 欧美国产一区二区三区| 久久999免费视频| 国产91在线高潮白浆在线观看| 8050国产精品久久久久久| 欧美一级片在线播放| 国产精品久久久久久久app| 国产97在线观看| 亚洲大胆人体视频| 亚洲国产精品成人va在线观看| 久久精品国产成人精品| 在线视频欧美性高潮| 全色精品综合影院|