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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
PHP 翻页 实例代码
Aug 07 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
php广告加载类用法实例
Sep 23 PHP
学习php开源项目的源码指南
Dec 21 PHP
Laravel实现表单提交
May 07 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
Ajax+PHP实现的模拟进度条功能示例
Feb 11 PHP
如何用PHP websocket实现网页实时聊天
May 26 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怎样调用MSSQL的存储过程
2006/10/09 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python 实现生成均匀分布的点
2019/12/05 Python
利用python实现逐步回归
2020/02/24 Python
python实现126邮箱发送邮件
2020/05/20 Python
Python分类测试代码实例汇总
2020/07/23 Python
Python如何将模块打包并发布
2020/08/30 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
酒店总经理工作职责
2013/12/13 职场文书
加工操作管理制度
2014/01/19 职场文书
小学教师师德感言
2014/02/10 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
家庭教育的心得体会
2014/09/01 职场文书
2014年教育工作总结
2014/11/26 职场文书
2014年党小组工作总结
2014/12/20 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python
Python的property属性详细讲解
2022/04/11 Python
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫