最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php實(shí)現(xiàn)的zip文件內(nèi)容比較類

 更新時(shí)間:2014年09月24日 15:23:43   投稿:shichen2014  
這篇文章主要介紹了php實(shí)現(xiàn)的zip文件內(nèi)容比較類及其用法,可實(shí)現(xiàn)比較兩個(gè)zip文件的內(nèi)容,返回新增、刪除、及相同的文件列表,是非常實(shí)用的技巧,需要的朋友可以參考下

本文實(shí)例講述了php實(shí)現(xiàn)的zip文件內(nèi)容比較類。是一個(gè)非常實(shí)用的PHP類文件。分享給大家供大家參考。具體分析如下:

該php zip文件比較類主要實(shí)現(xiàn)比較兩個(gè)zip文件的內(nèi)容,返回新增,刪除,及相同的文件列表。暫時(shí)只支持單層。

需求:上傳一個(gè)zip文件,zip內(nèi)有很多圖片文件。需要對(duì)圖片文件進(jìn)行一系列很耗時(shí)的處理。當(dāng)用戶再更新zip文件時(shí)。判斷zip內(nèi)文件是否一致,只處理不同的文件。這樣可以節(jié)省資源與時(shí)間,因此需要編寫一個(gè)能夠比較zip內(nèi)文件的類。

ZipCompare.class.php類文件如下:

<?php 
/** Zip Compare class 比較兩個(gè)zip文件的內(nèi)容,返回新增,刪除,及相同的文件列表,暫時(shí)只支持單層 
*  Date:  2014-05-18 
*  Author: fdipzone 
*  Ver:  1.0 
* 
*  Func: 
*  public compare    比較zip文件內(nèi)容 
*  private getInfo    獲取zip內(nèi)文件列表 
*  private parse     分析兩個(gè)zip的文件內(nèi)容 
*  private check     檢查zip文件是否正確 
*  private check_handler 檢查服務(wù)器是否有安裝unzip 
*/ 
 
class ZipCompare{ // class start 
 
  /** 比較zip文件內(nèi)容,列出不相同的部分 
  * @param String $zipfile1 zip文件1 
  * @param String $zipfile2 zip文件2 
  * @return Array 
  */ 
  public function compare($zipfile1, $zipfile2){ 
 
    // 檢查是否有安裝unzip 
    if(!$this->check_handler()){ 
      throw new Exception('unzip not install'); 
    } 
 
    // 檢查zip文件 
    if(!$this->check($zipfile1) || !$this->check($zipfile2)){ 
      throw new Exception('zipfile not exists or error'); 
    } 
 
    // 獲取zip內(nèi)文件列表 
    $zipinfo1 = $this->getInfo($zipfile1); 
    $zipinfo2 = $this->getInfo($zipfile2); 
 
    // 分析兩個(gè)zip的文件內(nèi)容,返回相同及不同的文件列表 
    return $this->parse($zipinfo1, $zipinfo2); 
 
  } 
 
  /** 獲取zip內(nèi)文件列表 
  * @param String $zipfile zip文件 
  * @return Array      zip內(nèi)文件列表 
  */ 
  private function getInfo($zipfile){ 
 
    // unzip -v fields 
    $fields = array('Length','Method','Size','Cmpr','Date','Time','CRC-32','Name'); 
 
    // zip verbose 
    $verbose = shell_exec(sprintf("unzip -v %s | sed '\$d' | sed '\$d' | sed -n '4,\$p'", $zipfile)); 
 
    // zip info 
    $zipinfo = array(); 
 
    $filelist = explode("\n", $verbose); 
 
    if($filelist){ 
      foreach($filelist as $rowdata){ 
        if($rowdata==''){ 
          continue; 
        } 
        $rowdata = preg_replace('/[ ]{2,}/', ' ', $rowdata); // 將兩個(gè)或以上空格替換為一個(gè) 
        $tmp = array_slice(explode(' ', $rowdata), 1);    // 去掉第一個(gè)空格 
 
        $file = array_combine($fields, $tmp); 
 
        $zipinfo[$file['Name']] = $file['Length'].'_'.$file['CRC-32']; // 文件名,長度,CRC32,用于校驗(yàn) 
      } 
    } 
    return $zipinfo; 
  } 
 
 
  /** 分析兩個(gè)zip文件內(nèi)容 
  * @param String $zipinfo1 
  * @param String $zipinfo2 
  * @return Array 
  */ 
  private function parse($zipinfo1, $zipinfo2){ 
 
    $result = array( 
        'add' => array(), // 新增 
        'del' => array(), // 缺少 
        'match' => array() // 匹配 
      ); 
 
    if($zipinfo1 && $zipinfo2){ 
 
      // 在zip1但不在zip2的文件 
      $result['add'] = array_values(array_diff(array_keys($zipinfo1), array_keys($zipinfo2))); 
 
      // 在zip2但不在zip1的文件 
      $result['del'] = array_values(array_diff(array_keys($zipinfo2), array_keys($zipinfo1))); 
 
      // 同時(shí)在zip1與zip2的文件 
      $match_file = array_values(array_diff(array_keys($zipinfo1), $result['add'])); 
 
      // 檢查相同文件名的文件內(nèi)容是否匹配 
      for($i=0,$len=count($match_file); $i<$len; $i++){ 
 
        if($zipinfo1[$match_file[$i]]==$zipinfo2[$match_file[$i]]){ // match 
          array_push($result['match'], $match_file[$i]); 
        }else{ // not match, change to add 
          array_push($result['add'], $match_file[$i]); 
        } 
      } 
    } 
    return $result; 
  } 
 
  /** 檢查zip文件是否正確 
  * @param String $zipfile zip文件 
  * @return boolean 
  */ 
  private function check($zipfile){ 
    // 文件存在且能解壓 
    return file_exists($zipfile) && shell_exec(sprintf('unzip -v %s | wc -l', $zipfile))>1; 
  } 
 
 
  /** 檢查服務(wù)器是否有安裝unzip 
  * @return boolean 
  */ 
  private function check_handler(){ 
    return strstr(shell_exec('unzip -v'), 'version')!=''; 
  } 
} // class end 
?>

demo示例程序如下:

<?php 
require "ZipCompare.class.php"; 
 
$obj = new ZipCompare(); 
$result = $obj->compare('test1.zip','test2.zip'); 
 
print_r($result); 
 
?>

執(zhí)行后輸出:

Array 
( 
  [add] => Array 
    ( 
      [0] => 9.jpg 
    ) 
 
  [del] => Array 
    ( 
      [0] => 5.jpg 
      [1] => 6.jpg 
      [2] => 7.jpg 
      [3] => 8.jpg 
    ) 
 
  [match] => Array 
    ( 
      [0] => 1.jpg 
      [1] => 10.jpg 
      [2] => 11.jpg 
      [3] => 12.jpg 
      [4] => 13.jpg 
      [5] => 14.jpg 
      [6] => 15.jpg 
      [7] => 16.jpg 
      [8] => 17.jpg 
      [9] => 18.jpg 
      [10] => 2.jpg 
      [11] => 3.jpg 
      [12] => 4.jpg 
    ) 
)

完整實(shí)例代碼點(diǎn)擊此處本站下載

希望本文所述對(duì)大家PHP程序設(shè)計(jì)的學(xué)習(xí)有所幫助。

相關(guān)文章

  • PHP獲取表單textarea數(shù)據(jù)中的換行問題

    PHP獲取表單textarea數(shù)據(jù)中的換行問題

    閑來無事,在網(wǎng)上看到一篇關(guān)于php表單轉(zhuǎn)換textarea換行符的文章,看完后,根據(jù)以往經(jīng)驗(yàn),感覺上這篇文章中的一些信息并不準(zhǔn)確...于是便自己親自對(duì)php獲取表單數(shù)據(jù)中的換行符問題進(jìn)行研究
    2010-09-09
  • php生成圖片縮略圖功能示例

    php生成圖片縮略圖功能示例

    這篇文章主要介紹了php生成圖片縮略圖功能,結(jié)合完整實(shí)例形式分析了php縮略圖生成的詳細(xì)步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-02-02
  • php使用curl代理實(shí)現(xiàn)抓取數(shù)據(jù)的方法

    php使用curl代理實(shí)現(xiàn)抓取數(shù)據(jù)的方法

    這篇文章主要介紹了php使用curl代理實(shí)現(xiàn)抓取數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了php使用curl實(shí)現(xiàn)代理抓取數(shù)據(jù)的操作技巧,需要的朋友可以參考下
    2017-02-02
  • PHP共享內(nèi)存用法實(shí)例分析

    PHP共享內(nèi)存用法實(shí)例分析

    這篇文章主要介紹了PHP共享內(nèi)存用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了基于共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通信的技巧,需要的朋友可以參考下
    2016-02-02
  • PHP實(shí)現(xiàn)生成帶背景的圖形驗(yàn)證碼功能

    PHP實(shí)現(xiàn)生成帶背景的圖形驗(yàn)證碼功能

    這篇文章主要介紹了PHP實(shí)現(xiàn)生成帶背景的圖形驗(yàn)證碼功能,結(jié)合實(shí)例形式詳細(xì)分析了php生成帶背景的圖形驗(yàn)證碼操作相關(guān)步驟與操作技巧,需要的朋友可以參考下
    2016-10-10
  • php構(gòu)造函數(shù)與析構(gòu)函數(shù)

    php構(gòu)造函數(shù)與析構(gòu)函數(shù)

    PHP析構(gòu)函數(shù)與構(gòu)造函數(shù)是相反的,它們被調(diào)用來一個(gè)對(duì)象從內(nèi)存中銷毀,幫助我們釋放對(duì)象屬性所占用的內(nèi)存并銷毀對(duì)象相關(guān)的資源。
    2016-04-04
  • php修改文件上傳限制方法匯總

    php修改文件上傳限制方法匯總

    這篇文章主要介紹了php修改文件上傳限制方法匯總,十分的細(xì)致全面,基本上算是最全面的方法匯總了,希望大家能夠喜歡。
    2015-04-04
  • php實(shí)現(xiàn)session自定義會(huì)話處理器的方法

    php實(shí)現(xiàn)session自定義會(huì)話處理器的方法

    這篇文章主要介紹了php實(shí)現(xiàn)session自定義會(huì)話處理器的方法,可通過設(shè)置session.save_handler為user來調(diào)用自定義的回調(diào)函數(shù),從而實(shí)現(xiàn)session自定義會(huì)話處理器的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01
  • php 從數(shù)據(jù)庫提取二進(jìn)制圖片的處理代碼

    php 從數(shù)據(jù)庫提取二進(jìn)制圖片的處理代碼

    形式上類似UCH 只是存儲(chǔ)方式不一樣 本人比較愚鈍 這個(gè)問題困惑了我半天 希望對(duì)有同樣問題的phper有所幫助 高手們別見笑!
    2009-09-09
  • Discuz 5.0 中讀取純真IP數(shù)據(jù)庫函數(shù)分析

    Discuz 5.0 中讀取純真IP數(shù)據(jù)庫函數(shù)分析

    Discuz 5.0 中讀取純真IP數(shù)據(jù)庫函數(shù)分析...
    2007-03-03

最新評(píng)論

建湖县| 元江| 西乌珠穆沁旗| 浮梁县| 江都市| 秦安县| 九台市| 五家渠市| 夏河县| 博湖县| 大兴区| 司法| 吉木萨尔县| 长垣县| 正定县| 潮安县| 关岭| 道真| 兴文县| 衡阳市| 南安市| 巴马| 合川市| 龙山县| 马公市| 黄陵县| 麻江县| 林周县| 姜堰市| 花垣县| 无锡市| 吉木萨尔县| 密云县| 九台市| 武功县| 苗栗市| 聊城市| 合作市| 北流市| 乐清市| 成安县|