php实现比较两个文件夹异同的方法


本文实例讲述了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程序设计有所帮助。



相关阅读:
AngularJS入门教程之路由与多视图详解
JS.findElementById()使用介绍
基于unique与primary约束的区别分析
JS实现网页右侧带动画效果的伸缩窗口代码
html5 svg 中元素点击事件添加方法
php出现web系统多域名登录失败的解决方法
c++动态内存空间示例(自定义空间类型大小和空间长度)
JS实现仿新浪黄色经典滑动门效果代码
Android编程之ListPreference用法实例分析
win10升级C盘东西还有吗 win10自动升级后桌面文件会丢失吗
Android编程实现泡泡聊天界面实例详解(附源码)
基于javascript简单实现对身份证校验
8个实用的jQuery技巧
MySQL性能优化
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 开学经典语录 追忆我们的那些年(4) 经膏蟹 我的同学仲昶煜450字 小学五年级作文400字:难忘的体验 你的背影让我记住了你作文1100字 永远是她的“蚌壳精” 我爱故乡的桔子作文400字 小学五年级作文450字:别里科夫之死 做不成你的喜欢,让我成为你的习惯 今夜风雪情依旧 握我的手,在你的掌心(一)作文200字 田园访友作文700字 治国的前提是先治党 花开荼蘼后会无期 丑态百出作文450字 行走在记忆的梦里 看图写话 五彩的秋天 缘来为你 超市里女促销员的“言” 不能爱你,我便用一生想念你 在夏天绽放 2016简单英文自我介绍 骑自行车的作文 家有慢老600字 《营销灵魂》读后感 2015公司项目员工离职辞职报告 脑子很乱 留言作文450字 祝妈妈生日快乐的句子 水调歌头(明日,纯中以酒见贶,约即见过。徘徊江上久不至,复次其韵) 最喜欢 2015一般活动总结怎么写 花儿那样灿烂作文1000字 庆七一建党节讲话稿 给院长的辞职报告 两会精神心得体会 描写城市景色的段落 小学四年级作文350字:狮子和猎人 克服不良的习惯 除夕之夜作文300字:崭新的日历 酒类趣味广告语集锦 浅析我国商业银行国际贸易融资业务的发展 《情书》和《情债》 小学生一年级作文:少年的乐章 我的学习方法 流浪狗的自述作文900字 高考前班主任最后一次讲话 经典语录(收集武林外传、爱情公寓等经典的台词和网络红词,绝对搞笑,值得珍藏 神六升天作文350字

Copyright © 2016 phpStudy |