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 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
用PHP连接MySQL代码的参数说明
Jun 07 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
PHP clearstatcache()函数详解
Mar 02 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
Ubuntu12下编译安装PHP5.3开发环境
Mar 27 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 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 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
28个JS验证函数收集
2010/03/02 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
vue实现简单的星级评分组件源码
2018/11/16 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
使用python生成目录树
2018/03/29 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python如何获取文件路径/目录
2020/09/22 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
大学生求职简历的自我评价范文
2013/10/12 职场文书
军训心得体会
2013/12/31 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
2015年党性分析材料
2014/12/19 职场文书
酒会邀请函
2015/01/31 职场文书
公务员处分决定书
2015/06/25 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server