A5下载站:努力做内容最丰富最安全的下载站! 网站地图最新更新下载排行专题软件发布

热门软件

地铁跑酷

冒险迷岛

全民迷宫

连连消大作战

小河狸创客

阿里健康医鹿

支付宝app

番薯小说

MOMO陌陌

虾米音乐app

位置导航:A5下载 > 源码技巧 > 父类数据

php比较两个文件夹的差异

时间:2015-04-01 09:49来源:a5源码作者:zhao浏览:151
php 怎么实现文件的对比……

要求:
只能使用命令行,比较两个文件夹的不同,包括文件的差异。

思考:
虽然linux下有diff。。。。还是用php吧,代码改的方便,速度也很快,以下排除了.svn目录的比较
文件要比较md5校验和

思路:
1)把第一路径作为标准路径,列出第1个路径中有的,第2个路径中没有的文件或文件夹,或者是不同的文件。
2)然后,列出第2个路径中有的,第1个路径中却不存在的文件和文件夹。

调用示例:
php compare_folder.php /home/temp/2 /home/temp/55
//转载自JAVAEYE

源码:

<?php

/**

*工具文件

*目的在于递归比较两个文件夹

*

*调用示例

*phpcompare_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"allOKn";

/**

*去除路径末尾的/,并确保是绝对路径

*

*@paramunknown_type$dir

*@returnunknown

*/

functiondel_postfix($dir)

{

if(!preg_match('#^/#',$dir)){

thrownewException('参数必须是绝对路径');

}

$dir=preg_replace('#/$#','',$dir);

return$dir;

}

/**

*公用函数,会调用一个递归方法实现比较

*

*@paramstring$dir1作为标准的路径

*@paramstring$dir2对比用的路径

*@paramint$only_check_has为1表示不比较文件差异,为0表示还要比较文件的md5校验和

*/

functionprocess_compare($dir1,$dir2,$only_check_has){

compare_file_folder($dir1,$dir1,$dir2,$only_check_has);

}

/**

*真实的函数,私有函数

*

*@paramstring$dir1路径1,是标准

*@paramstring$base_dir1不变的参数路径2

*@paramstring$base_dir2不变的待比较的路径2

*@paramint$only_check_has为1表示不比较文件差异,为0表示还要比较文件的md5校验和

*

*/

functioncompare_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'!!notfounddirection:'.$other.'('.$new.")n";

}

compare_file_folder($new,$base_dir1,$base_dir2,$only_check_has);

}else{//如果1是文件,则2也应该是文件

if(!is_file($other)){

echo'!!notfoundfile:'.$other.'('.$new.")n";

}elseif($only_check_has==0&&(md5_file($other)!=md5_file($new))){

echo'!!filemd5error:'.$other.'('.$new.")n";

}

}

}

}

closedir($dh);

}

}

}

?>