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

来源:互联网 发布:淘宝可以删除差评 编辑:程序博客网 时间:2024/05/17 08:42

转载来至

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

<?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