这样写性能肯定是要差一点,保存在数据库就好点,只是保存数据库每次要去读,也是耗时的
<?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; }