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

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

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

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

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

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

ZipCompare.class.php類文件如下:

<?php 
/** Zip Compare class 比較兩個zip文件的內(nèi)容,返回新增,刪除,及相同的文件列表,暫時只支持單層 
*  Date:  2014-05-18 
*  Author: fdipzone 
*  Ver:  1.0 
* 
*  Func: 
*  public compare    比較zip文件內(nèi)容 
*  private getInfo    獲取zip內(nèi)文件列表 
*  private parse     分析兩個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); 
 
    // 分析兩個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); // 將兩個或以上空格替換為一個 
        $tmp = array_slice(explode(' ', $rowdata), 1);    // 去掉第一個空格 
 
        $file = array_combine($fields, $tmp); 
 
        $zipinfo[$file['Name']] = $file['Length'].'_'.$file['CRC-32']; // 文件名,長度,CRC32,用于校驗 
      } 
    } 
    return $zipinfo; 
  } 
 
 
  /** 分析兩個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))); 
 
      // 同時在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 
    ) 
)

完整實例代碼點擊此處本站下載。

希望本文所述對大家PHP程序設(shè)計的學習有所幫助。

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了PHP實現(xiàn)生成帶背景的圖形驗證碼功能,結(jié)合實例形式詳細分析了php生成帶背景的圖形驗證碼操作相關(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)用來一個對象從內(nèi)存中銷毀,幫助我們釋放對象屬性所占用的內(nèi)存并銷毀對象相關(guān)的資源。
    2016-04-04
  • php修改文件上傳限制方法匯總

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

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

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

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

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

    形式上類似UCH 只是存儲方式不一樣 本人比較愚鈍 這個問題困惑了我半天 希望對有同樣問題的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

最新評論

教育| 襄樊市| 灌阳县| 盐城市| 吉林省| 黄山市| 龙岩市| 乡城县| 古丈县| 甘孜| 治县。| 中卫市| 防城港市| 建平县| 临邑县| 瑞昌市| 海晏县| 邳州市| 武胜县| 界首市| 垦利县| 合江县| 孝义市| 谷城县| 怀远县| 彰武县| 呼玛县| 闻喜县| 高雄县| 改则县| 洛阳市| 寻乌县| 措勤县| 成都市| 罗平县| 抚州市| 额济纳旗| 云林县| 正定县| 墨江| 常宁市|