加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 02:41:16 所属栏目:PHP教程 来源:网络整理
导读:《php实现比较两个文件夹异同的方法》要点: 本文介绍了php实现比较两个文件夹异同的方法,希望对您有用。如果有疑问,可以联系我们。 本篇章节讲解php实现比较两个文件夹异同的办法.供大家参考研究.具体分析如下: PHP学习 要求: 只能使用命令行,

《php实现比较两个文件夹异同的方法》要点:
本文介绍了php实现比较两个文件夹异同的方法,希望对您有用。如果有疑问,可以联系我们。

本篇章节讲解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 OKn"; 
/** 
 * 去除路径末尾的/,并确保是绝对路径 
 * 
 * @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,$only_check_has){ 
 compare_file_folder($dir1,$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 .'#',$new); 
     if(is_dir($new)) { 
      //比较 
      if (!is_dir($other)) { 
       echo '!!not found direction: '. $other. ' (' . $new .")n"; 
      } 
      compare_file_folder($new,$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实现比较两个文件夹异同的方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读