php实现比较两个文件夹异同的方法


Posted in PHP onJune 18, 2015

本文实例讲述了php实现比较两个文件夹异同的方法。分享给大家供大家参考。具体分析如下:

要求:

只能使用命令行,比较两个文件夹的不同,包括文件的差异。

思考:

虽然linux下有diff。。。。还是用php吧,代码改的方便,速度也很快,以下排除了.svn目录的比较
文件要比较md5校验和

思路:

1)把第一路径作为标准路径,列出第1个路径中有的,第2个路径中没有的文件或文件夹,或者是不同的文件。
2)然后,列出第2个路径中有的,第1个路径中却不存在的文件和文件夹。

调用示例:

php compare_folder.php /home/temp/2 /home/temp/55

代码如下:

<?php 
/** 
 * 工具文件 
 * 目的在于递归比较两个文件夹 
 * 
 * 调用示例 
 * php compare_folder.php /home/temp/2 /home/temp/55 
 * 
 */ 
//参数确定 
if (count($argv) > 1 ) 
 $dir1 = del_postfix($argv[1]); 
else 
 $dir1 = '/'; 
if (count($argv) > 2 ) 
 $dir2 = del_postfix($argv[2]); 
else 
 $dir2 = '/'; 
//检查第一个路径有,后者没有或错误的方法。 
process_compare($dir1, $dir2, 0); 
echo "===========================================================\n"; 
//检查第2个路径的多余文件夹或文件 
process_compare($dir2 , $dir1, 1); 
echo "all OK\n"; 
/** 
 * 去除路径末尾的/,并确保是绝对路径 
 * 
 * @param unknown_type $dir 
 * @return unknown 
 */ 
function del_postfix($dir) 
{ 
 if (!preg_match('#^/#', $dir)) { 
  throw new Exception('参数必须是绝对路径'); 
 } 
 $dir = preg_replace('#/$#', '', $dir); 
 return $dir; 
} 
/** 
 * 公用函数,会调用一个递归方法实现比较 
 * 
 * @param string $dir1 作为标准的路径 
 * @param string $dir2 对比用的路径 
 * @param int $only_check_has 为1表示不比较文件差异,为0表示还要比较文件的md5校验和 
 */ 
function process_compare($dir1, $dir2, $only_check_has){ 
 compare_file_folder($dir1, $dir1, $dir2, $only_check_has); 
} 
/** 
 * 真实的函数,私有函数 
 * 
 * @param string $dir1  路径1,是标准 
 * @param string $base_dir1 不变的参数路径2 
 * @param string $base_dir2 不变的待比较的路径2 
 * @param int $only_check_has 为1表示不比较文件差异,为0表示还要比较文件的md5校验和 
 * 
 */ 
function compare_file_folder($dir1, $base_dir1, $base_dir2, $only_check_has=0){ 
 if (is_dir($dir1)) { 
  $handle = dir($dir1); 
  if ($dh = opendir($dir1)) { 
   while ($entry = $handle->read()) { 
    if (($entry != ".") && ($entry != "..") && ($entry != ".svn")){ 
     $new = $dir1."/".$entry; 
     //echo 'compare: ' . $new . "\n"; 
     $other = preg_replace('#^'. $base_dir1 .'#' , $base_dir2, $new); 
     if(is_dir($new)) { 
      //比较 
      if (!is_dir($other)) { 
       echo '!!not found direction: '. $other. ' (' . $new .")\n"; 
      } 
      compare_file_folder($new, $base_dir1,$base_dir2, $only_check_has) ; 
     } else { //如果1是文件,则2也应该是文件 
      if (!is_file($other)) { 
       echo '!!not found file:  '. $other. ' ('.$new .")\n"; 
      }elseif ($only_check_has ==0 && ( md5_file($other) != md5_file($new) ) ){ 
       echo '!!file md5 error:  '. $other. ' ('.$new .")\n"; 
      } 
     } 
    } 
   } 
   closedir($dh); 
  } 
 } 
} 
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP使用者状态管理功能的应用
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
PHP实现简单数字分页效果
Jul 26 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
实例介绍PHP删除数组中的重复元素
Mar 03 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 #PHP
php实现转换ubb代码的方法
Jun 18 #PHP
php实现的日历程序
Jun 18 #PHP
php实现的验证码文件类实例
Jun 18 #PHP
php实现的简单检验登陆类
Jun 18 #PHP
php实现比较全的数据库操作类
Jun 18 #PHP
php文件操作相关类实例
Jun 18 #PHP
You might like
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
php实现socket推送技术的示例
2017/12/20 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
跟老齐学Python之做一个小游戏
2014/09/28 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
python读写二进制文件的方法
2015/05/09 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
公司年会抽奖活动主持词
2014/03/31 职场文书
诚信考试倡议书
2014/04/15 职场文书
上班迟到检讨书
2014/09/15 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
房产公证书样本
2015/01/23 职场文书
幽灵公主观后感
2015/06/09 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技