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的十大要点(上)
Feb 04 PHP
PHP生成UTF8文件的方法
May 15 PHP
常见的PHP五种设计模式小结
Mar 23 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
php + WebUploader实现图片批量上传功能
May 06 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 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中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
php反射应用示例
2014/02/25 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
mouse_on_title.js
2006/08/25 Javascript
用javascript操作xml
2006/11/04 Javascript
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
JS常用知识点整理
2017/01/21 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python写入xml文件的方法
2015/05/08 Python
Python制作爬虫采集小说
2015/10/25 Python
Python输出各行命令详解
2018/02/01 Python
Python File readlines() 使用方法
2018/03/19 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python如何运行js语句
2020/09/09 Python
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
自我评价格式
2014/01/06 职场文书
小学生读书笔记范文
2015/06/30 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis