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开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
Laravel数据库读写分离配置的方法
Oct 13 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 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
PDO::query讲解
2019/01/29 PHP
JS 判断代码全收集
2009/04/28 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
python实现指定字符串补全空格的方法
2015/04/30 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
pyspark 随机森林的实现
2020/04/24 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
Python列表推导式实现代码实例
2020/09/09 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
C#面试常见问题
2013/02/25 面试题
英文版银行求职信
2013/10/09 职场文书
个人找工作求职简历的自我评价
2013/10/20 职场文书
难忘的一天教学反思
2014/04/30 职场文书
第二课堂活动总结
2014/05/07 职场文书
个人买房协议书范本
2014/10/06 职场文书
工作自我推荐信范文
2015/03/25 职场文书
2015年国培研修感言
2015/08/01 职场文书
Go并发4种方法简明讲解
2022/04/06 Golang