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防止post重复提交数据的简单例子
Jun 07 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 PHP
PHP MYSQL简易交互式站点开发
Dec 27 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 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
初学CAKEPHP 基础教程
2009/11/02 PHP
php检测useragent版本示例
2014/03/24 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
jquery 学习笔记一
2010/04/07 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
vue axios用法教程详解
2017/07/23 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
一个超级简单的python web程序
2014/09/11 Python
Python Web版语音合成实例详解
2019/07/16 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
keras打印loss对权重的导数方式
2020/06/10 Python
Python 多进程、多线程效率对比
2020/11/19 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
《记金华的双龙洞》教学反思
2014/04/19 职场文书
创文明城市标语
2014/06/16 职场文书
求职简历自荐信
2014/06/18 职场文书
经营理念口号
2014/06/21 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server