PHP遍历文件之比对文件(二)

转载来至

这样写性能肯定是要差一点,保存在数据库就好点,只是保存数据库每次要去读,也是耗时的

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/3/23
 * Time: 22:36
 */

$file_limit = ['png', 'jpg', 'gif', 'bmp', 'exe']; //不需要加密的文件后缀名
$file_limit_s = ['.idea','.','..','file'];//忽略文件目录
$file_name='./file/file.txt';
$mdongwenj=[];
if(!file_exists ('./file')){
    mkdir('./file',777);
}
/**
 * @param $file_name 保存MD5值的文件
 * @param $file 需要判断的的文件
 * @param $md5  当前文件的MD5值
 */
function du_file($file_name,$file,$md5){
    $lines=file($file_name);
    foreach ($lines as $value) {
        $line=explode("|",$value);
        if($file==trim($line[1])){
            if($line[0]!=$md5){
                return false;
            }
        }
    }
    return true;
}

//遍历文件
function traverse($path = '.', $file_limit, $file_limit_s,$file_name)
{
    if (file_exists($path) == false) {
        return 0;
    }
    global $mdongwenj;
    $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
    while (($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
        $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径
        if (in_array($file, $file_limit_s)) {
            continue;
        } else if (is_dir($sub_dir)) {    //如果是目录,进行递归
//            echo '这个是目录 ' . $file . ':<br>';
            traverse($sub_dir, $file_limit, $file_limit_s,$file_name);

        } else {    //如果是文件,直接输出

//            echo '这个是文件' .dirname(__FILE__). "\\" . $file . '<br>';
            $path_file = dirname(__FILE__) . "\\" . $file;
//            echo '这个是文件' . $path_file . '<br>';
            $ex = extend_3($path_file); //忽略后缀名
            if (!in_array($ex, $file_limit)) {
                $file_str=dirname(__FILE__) . "\\" . $file ;
                $str= file_get_contents($file_str);
//                echo  md5($str).'|'. dirname(__FILE__) . "\\" . $file ."<br>";
                if(!du_file($file_name,$file_str, md5($str))){
                    $mdongwenj[]=$file_str;
                }
            }
        }
    }
    return 1;
}

//获取文件后缀名
function extend_3($file_name)
{
    $extend = explode('.', $file_name);
    $va = count($extend) - 1;
    return $extend [$va];
}

$aa = traverse('.', $file_limit, $file_limit_s,$file_name);

$md_str='';
foreach($mdongwenj as $vaiue){
    $md_str.=$vaiue."<br>\n";
}

if(empty($md_str)){
    echo '文件全部没有变动';
}else{
    echo '变动了的文件'.$md_str;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值