亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)有很多圖片文件。需要對圖片文件進行一系列很耗時的處理。當(dāng)用戶再更新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è)計的學(xué)習(xí)有所幫助。

相關(guān)文章

  • PHP查詢MySQL大量數(shù)據(jù)的時候內(nèi)存占用分析

    PHP查詢MySQL大量數(shù)據(jù)的時候內(nèi)存占用分析

    這篇文章主要是從原理, 手冊和源碼分析在PHP中查詢MySQL返回大量結(jié)果時, 內(nèi)存占用的問題, 同時對使用MySQL C API也有涉及.
    2011-07-07
  • PHP memcache在微信公眾平臺的應(yīng)用方法示例

    PHP memcache在微信公眾平臺的應(yīng)用方法示例

    這篇文章主要介紹了PHP memcache在微信公眾平臺的應(yīng)用方法,結(jié)合具體實例形式分析了php使用memcache保存用戶訪問記錄與響應(yīng)用戶訪問并給出提示信息的交互模式實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • PHP異常Parse error: syntax error, unexpected T_VAR錯誤解決方法

    PHP異常Parse error: syntax error, unexpected T_VAR錯誤解決方法

    在PHP中根本不需要使用var聲明的,但是當(dāng)一個變量作為一個類的成員變量的時候,使用var還是沒有問題的
    2014-05-05
  • PHP遍歷數(shù)組的三種方法及效率對比分析

    PHP遍歷數(shù)組的三種方法及效率對比分析

    這篇文章主要介紹了PHP遍歷數(shù)組的三種方法及效率對比,實例分析了foreach、while與for三種遍歷數(shù)組的方法與相關(guān)的效率比對,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 深入理解PHP中的Streams工具

    深入理解PHP中的Streams工具

    這篇文章主要介紹了PHP中的Streams工具,主要用來處理PHP中的包裝類,需要的朋友可以參考下
    2015-07-07
  • Discuz 模板語句分析及知識技巧

    Discuz 模板語句分析及知識技巧

    Discuz模板語句分析及知識技巧,其實大家可以多研究下各種程序cms系統(tǒng),不過前提是,大家的基礎(chǔ)已經(jīng)不錯了。
    2009-08-08
  • PHP中使用Imagick實現(xiàn)各種圖片效果實例

    PHP中使用Imagick實現(xiàn)各種圖片效果實例

    這篇文章主要介紹了PHP中使用Imagick實現(xiàn)各種圖片效果實例,本文講解了偏置圖像、改變圖片大小、創(chuàng)建文本圖像、圖像模糊度處理等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • PHP獲取POST數(shù)據(jù)的幾種方法匯總

    PHP獲取POST數(shù)據(jù)的幾種方法匯總

    本文給大家匯總介紹了PHP獲取POST數(shù)據(jù)的幾種常用方法,這里分享給大家,有需要的小伙伴來參考下吧。
    2015-03-03
  • php 常用類整理

    php 常用類整理

    在實際開發(fā)過程會經(jīng)常會遇到一些重復(fù)的操作,如果每次都要自己去實現(xiàn)這無疑加重了自己的工作量,下面對一些可能經(jīng)常用到的類做個整理.
    2009-12-12
  • php實現(xiàn)基于PDO的預(yù)處理示例

    php實現(xiàn)基于PDO的預(yù)處理示例

    這篇文章主要介紹了php實現(xiàn)基于PDO的預(yù)處理,結(jié)合實例形式分析了php實現(xiàn)pdo預(yù)處理的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2017-03-03

最新評論