php实现的zip文件内容比较类_.docx

上传人:PIYPING 文档编号:11619512 上传时间:2021-08-26 格式:DOCX 页数:9 大小:13.60KB
返回 下载 相关 举报
php实现的zip文件内容比较类_.docx_第1页
第1页 / 共9页
php实现的zip文件内容比较类_.docx_第2页
第2页 / 共9页
php实现的zip文件内容比较类_.docx_第3页
第3页 / 共9页
php实现的zip文件内容比较类_.docx_第4页
第4页 / 共9页
php实现的zip文件内容比较类_.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《php实现的zip文件内容比较类_.docx》由会员分享,可在线阅读,更多相关《php实现的zip文件内容比较类_.docx(9页珍藏版)》请在三一文库上搜索。

1、php实现的zip文件内容比较类_ 本文实例讲解并描述了php实现的zip文件内容比较类。是一个特别有用的php类文件。分享给大家供大家参考。具体分析如下: 该php zip文件比较类主要实现比较两个zip文件的内容,返回新增,删除,及相同的文件列表。临时只支持单层。 需求:上传一个zip文件,zip内有许多图片文件。需要对图片文件进行一系列很耗时的处理。当用户再更新zip文件时。推断zip内文件是否全都,只处理不同的文件。这样可以节约资源与时间,因此需要编写一个能够比较zip内文件的类。 zipcompare.class.php类文件如下: ?php /* zip compare class

2、 比较两个zip文件的内容,返回新增,删除,及相同的文件列表,临时只支持单层 * date: 2021-05-18 * author: fdipzone * ver: 1.0 * * func: * public compare 比较zip文件内容 * private getinfo 猎取zip内文件列表 * private parse 分析两个zip的文件内容 * private check 检查zip文件是否正确 * private check_handler 检查服务器是否有安装unzip */ class zipcompare / class start /* 比较zip文件内容,列出

3、不相同的部分 * 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(z

4、ipfile not exists or error); / 猎取zip内文件列表 $zipinfo1 = $this-getinfo($zipfile1); $zipinfo2 = $this-getinfo($zipfile2); / 分析两个zip的文件内容,返回相同及不同的文件列表 return $this-parse($zipinfo1, $zipinfo2); /* 猎取zip内文件列表 * param string $zipfile zip文件 * return array zip内文件列表 */ private function getinfo($zipfile) / unzi

5、p -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=)

6、continue; $rowdata = preg_replace(/ 2,/, , $rowdata); / 将两个或以上空格替换为一个 $tmp = array_slice(explode( , $rowdata), 1); / 去掉第一个空格 $file = array_combine($fields, $tmp); $zipinfo$filename = $filelength._.$filecrc-32; / 文件名,长度,crc32,用于校验 return $zipinfo; /* 分析两个zip文件内容 * param string $zipinfo1 * param strin

7、g $zipinfo2 * return array */ private function parse($zipinfo1, $zipinfo2) $result = array( add = array(), / 新增 del = array(), / 缺少 match = array() / 匹配 ); if($zipinfo1 $zipinfo2) / 在zip1但不在zip2的文件 $resultadd = array_values(array_diff(array_keys($zipinfo1), array_keys($zipinfo2); / 在zip2但不在zip1的文件 $

8、resultdel = array_values(array_diff(array_keys($zipinfo2), array_keys($zipinfo1); / 同时在zip1与zip2的文件 $match_file = array_values(array_diff(array_keys($zipinfo1), $resultadd); / 检查相同文件名的文件内容是否匹配 for($i=0,$len=count($match_file); $i$len; $i+) if($zipinfo1$match_file$i=$zipinfo2$match_file$i) / match ar

9、ray_push($resultmatch, $match_file$i); else / not match, change to add array_push($resultadd, $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

10、-l, $zipfile)1; /* 检查服务器是否有安装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); ? 执行后输出: 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程序设计的学习有所关心。 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1