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程序设计有所帮助。

(0)

相关推荐

  • PHP获取文件夹内文件数的方法

    本文实例讲述了PHP获取文件夹内文件数的方法.分享给大家供大家参考.具体实现方法如下: function getfilecounts($ff){ $dir = './'.$ff; $handle = opendir($dir); $i = 0; while(false !== $file=(readdir($handle))){ if($file !== '.' && $file != '..') { $i++; } } closedir($handle); return $i; } 希望

  • php递归删除指定文件夹的方法小结

    本文实例总结了两种php递归删除指定文件夹的方法.分享给大家供大家参考.具体如下: 方法一: function recursiveDelete($dir) { if ($handle = @opendir($dir)) { while (($file = readdir($handle)) !== false) { if (($file == ".") || ($file == "..")) { continue; } if (is_dir($dir . '/' .

  • php遍历文件夹和文件列表示例分享

    为PHP遍历目录和文件列表写了一个简单的类,并附上使用实例,大家参考使用吧 复制代码 代码如下: <?phpdefine('DS', DIRECTORY_SEPARATOR); class getDirFile{ //返回数组    private $DirArray  = array();    private $FileArray = array();    private $DirFileArray = array(); private $Handle,$Dir,$File; //获取目录

  • php获取文件夹路径内的图片以及分页显示示例

    复制代码 代码如下: <div style="width: 90%; margin: 10px auto; border: 1px solid #ccc; text-align: center">    <?php    $page=isset($_GET['page'])?$_GET['page']:0;//从零开始    $imgnums = 10;    //每页显示的图片数    $path="upload";   //图片保存的目录   

  • php从文件夹随机读取文件的方法

    本文实例讲述了php从文件夹随机读取文件的方法.分享给大家供大家参考.具体实现方法如下: function RandomFile($folder='', $extensions='.*'){ // fix path: $folder = trim($folder); $folder = ($folder == '') ? './' : $folder; // check folder: if (!is_dir($folder)){ die('invalid folder given!'); }

  • PHP获取文件夹大小函数用法实例

    本文实例讲述了PHP获取文件夹大小函数用法.分享给大家供大家参考.具体如下: <?php // 获取文件夹大小 function getDirSize($dir) { $handle = opendir($dir); while (false!==($FolderOrFile = readdir($handle))) { if($FolderOrFile != "." && $FolderOrFile != "..") { if(is_dir(

  • php判断文件夹是否存在不存在则创建

    复制代码 代码如下: function mkdirs($dir, $mode = 0777) {     if (is_dir($dir) || @mkdir($dir, $mode)) return TRUE;     if (!mkdirs(dirname($dir), $mode)) return FALSE;     return @mkdir($dir, $mode); } mkdirs("aa01"); 默认的 mode 是 0777,意味着最大可能的访问权.有关 mode

  • php文件夹的创建与删除方法

    本文实例讲述了php文件夹的创建与删除方法.分享给大家供大家参考.具体如下: 1.创建文件夹 复制代码 代码如下: <?php //文件夹的创建 $file_path = "d:/fold/"; if(!file_exists($file_path)){  mkdir($file_path);  echo "创建文件夹成功"; }else{  echo "文件夹已存在"; } ?> 2.创建文件夹,递归式创建 复制代码 代码如下: &

  • php使用递归计算文件夹大小

    方法很简单,这里就不多废话了,直接奉上代码: 复制代码 代码如下: protected function dir_size($dir){         $dh = opendir($dir);             //打开目录,返回一个目录流         $size = 0;      //初始大小为0         while(false !== ($file = @readdir($dh))){     //循环读取目录下的文件            if($file!='.'

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

    本文实例讲述了php实现比较两个文件夹异同的方法.分享给大家供大家参考.具体分析如下: 要求: 只能使用命令行,比较两个文件夹的不同,包括文件的差异. 思考: 虽然linux下有diff....还是用php吧,代码改的方便,速度也很快,以下排除了.svn目录的比较 文件要比较md5校验和 思路: 1)把第一路径作为标准路径,列出第1个路径中有的,第2个路径中没有的文件或文件夹,或者是不同的文件. 2)然后,列出第2个路径中有的,第1个路径中却不存在的文件和文件夹. 调用示例: php compa

  • Python实现比较两个文件夹中代码变化的方法

    本文实例讲述了Python实现比较两个文件夹中代码变化的方法.分享给大家供大家参考.具体如下: 这里将修改代码后的目录与原始目录做对比,罗列出新增的代码文件,以及修改过的代码文件 # -*- coding: utf-8 -*- import os; folderA = "F:\\Projects\\FreeImageV3_14_1\\".lower(); folderB = u"E:\\Software\\图像解码库\\FreeImage3141\\FreeImage\\&q

  • Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】

    本文实例讲述了Python编程实现两个文件夹里文件的对比功能.分享给大家供大家参考,具体如下: #-*-coding:utf-8-*- #=============================================================================== # 目录对比工具(包含子目录 ),并列出 # 1.A比B多了哪些文件 # 2.B比A多了哪些文件 # 3.二者相同的文件:文件大小相同 VS 文件大小不同 (Size相同文件不打印:与Size不同文件显

  • Powershell比较两个文件夹的不同

    快速找出两个文件夹中不同的部分,可以使用下面例子: 复制代码 代码如下: $list1 = Get-ChildItem c:\Windows\system32 | Sort-Object -Property Name   $list2 = Get-ChildItem \\server12\c$\windows\system32 | Sort-Object -Property Name     Compare-Object -ReferenceObject $list1 -DifferenceOb

  • python同步两个文件夹下的内容

    本文实例为大家分享了python同步两个文件夹下的内容,供大家参考,具体内容如下 import os import shutil import time import logging import filecmp #日志文件配置 log_filename ='synchro.log' #日志输出格式化 log_format = '%(filename)s [%(asctime)s] [%(levelname)s] %(message)s' logging.basicConfig(format=l

  • python实现两个文件夹的同步

    其实无论windows还是Linux,简单地去实现两个两个文件夹的同步只需系统自带的复制命令加参数就可以了. WINDOWS : xcopy 源文件夹\* 目标文件夹 /s /e /y Linux : cp -r 源文件夹/* 目标文件夹 这里使用python来实现这些基本功能,并增加一些去重之类的增强功能. 1.复制源文件夹中文件至目标文件夹 要想同步两个文件夹中的数据,基本思路首先需要遍历源文件夹中的信息,将源文件夹中的文件复制到目标文件夹. 遍历文件夹采用os中的listdir函数就可以了

  • Python FTP两个文件夹间的同步实例代码

    具体代码如下所示: # -*- coding: utf-8 -*- ''''''' ftp自动检测源文件夹的更新,将源文件夹更新的内容拷贝到目标文件夹中 使用树的层序遍历算法,支持深度目录拷贝 ''' import os from ftplib import FTP import os,sys,string,datetime,time import shutil import socket class MyUpdateMonitor(object): def __init__(self, hos

  • linux 比较两个文件夹diff不同 (diff命令, md5列表)

    比较文件夹diff,可以直接使用diff命令 [root@~]# diff -urNa dir1 dir2 -a Treat all files as text and compare them line-by-line, even if they do not seem to be text. -N, --new-file In directory comparison, if a file is found in only one directory, treat it as present

  • Linux 压缩某个文件夹的实现方法

    Linux 压缩某个文件夹的实现方法 tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件. zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归 zip [参数] [打包后的文件名] [打包的目录路径] 解压 unzip xahot.zip 不解释 linux zip命令的基本用法是: li

  • linux上配置jdk时,java命令提示没有此文件或文件夹的解决方法

    出现这个问题可能有以下几种原因: 1.对该文件没有执行的权限. 2.我们的机器是64位的,而下载的jdk是32位的. 我就是后一种原因造成的,好久才想明白. 以上这篇linux上配置jdk时,java命令提示没有此文件或文件夹的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐