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文件
Jan 04 PHP
使用 MySQL Date/Time 类型
Mar 26 PHP
如何用php获取程序执行的时间
Jun 09 PHP
php class类的用法详细总结
Oct 17 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
SMARTY学习手记
2007/01/04 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
JS继承 笔记
2011/07/13 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python 处理图片像素点的实例
2019/01/08 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
公司薪酬管理制度
2014/01/31 职场文书
2014政务公开实施方案
2014/02/19 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
硕士学位申请报告
2015/05/15 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python