PHP面试之文件夹下内容重复的文件去重

来源:互联网 发布:山东广电网络集团官网 编辑:程序博客网 时间:2024/06/16 08:57

今天下午复试,面试官引导我写出文件夹下内容重复的文件去重。然后自己在黑板上写了好久没理清楚,现在写出来了,记录一下,如有不对,请各位大佬指出,或者有更好的方式请指导

首先用到md5_file()因为之前也没接触过这个函数 在这里看下手册

md5_file() 函数计算文件的 MD5 散列。md5_file() 函数使用 RSA 数据安全,包括 MD5 报文摘要算法。来自 RFC 1321 的解释 - MD5 报文摘要算法:MD5 报文摘要算法将任意长度的信息作为输入值,并将其换算成一个 128 位长度的"指纹信息"或"报文摘要"值来代表这个输入值,并以换算后的值作为结果。MD5 算法主要是为数字签名应用程序而设计的;在这个数字签名应用程序中,较大的文件将在加密(这里的加密过程是通过在一个密码系统下[如:RSA]的公开密钥下设置私有密钥而完成的)之前以一种安全的方式进行压缩。    

这里有两种写法
大神写给我的

class filesss{    private $files = [], $other = [] ,$directory = 'F:/phpstudy/WWW/test';    public function getFiles($directory = '')    {        $dirHandle = opendir($this->directory);          if(!$dirHandle) contniue;        while(($file = readdir($dirHandle)) !== false)        {            if($file != '.' && $file != '..')            {                $path = $directory.$file;                if(is_file($path))                 {                    $md5_file = md5_file($path);                    if(!isset($this->files[$md5_file]))                         $this->files[$md5_file] = $path;                    else                         $this->other[$md5_file][] = $path;                }                elseif(is_dir($path))                {                    $xxxxx = $this->getFiles($path.DIRECTORY_SEPARATOR);                       if(is_array($xxxxx) && !empty($xxxxx))                    {                        if(!empty($xxxxx['file'])) $files = array_merge($files,$xxxxx['files']);                        if(!empty($xxxxx['other'])) $files = array_merge($files,$xxxxx['other']);                       }                }            }        }        return ['files'=>$this->files,'other'=>$this->other];    }}$files = (new filesss())->getFiles();echo "<pre>";print_r($files);

一个是我写的

 $dir = "F:/phpstudy/WWW/test";  //要获取的目录 //$dir = "F:/phpstudy/WWW"; function deepScanDir($dir) {    $fileArr = array ();    $dirArr = array ();    $arr = array();    $newarray = array();    $dir = rtrim($dir, '//');    if (is_dir($dir)) {        $dirHandle = opendir($dir);        while (false !== ($fileName = readdir($dirHandle))) {            $subFile = $dir . DIRECTORY_SEPARATOR . $fileName;             if (is_file($subFile)) {                $fileArr[$subFile] = md5_file($subFile);            } elseif (is_dir($subFile) && str_replace('.', '', $fileName) != '') {                $dirArr[] = $subFile;                $arr = deepScanDir($subFile);                //$dirArr = array_merge($dirArr, $arr['dir']);                $fileArr = array_merge($fileArr, $arr['file']);            }        }        closedir($dirHandle);    }  return array (       // 'dir' => $dirArr,        'file' => $fileArr    );}echo "<pre>";$file=deepScanDir($dir);print_r($file);print_r(array_unique($file['file'])); 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机音量键坏了怎么办 xp系统声音没了怎么办 柿子烂到窗台上怎么办 小窗户厨房太暗怎么办 抬东西把腰闪了怎么办 搬重东西后腰疼怎么办 闪了腰怎么办一动就疼 窗户的把手断了怎么办 窗户寸漏不了水怎么办 窗户打开关不上怎么办 新装修的房子有甲醛怎么办 橄榄核上油花了怎么办 虫子飞到耳朵里怎么办 手被虫子咬肿了怎么办 梦见牙掉出血该怎么办 黑户急需5万块钱怎么办 家里欠了好多钱怎么办 欠好多网贷我该怎么办 外面欠了很多钱怎么办 欠了好多网贷怎么办 欠那么多钱我该怎么办 急用钱怎么办谁给指条路 晚上睡不着觉怎么办白天又醒不来 胃疼了好几天怎么办 手机移动卡怎么办副卡 大学我好累我怎么办 感觉婚姻很累了怎么办 一个人的心累了怎么办 头被凉水激着了怎么办 人一但懒惰了怎么办 太懒了怎么办都不想活 和老公和不来该怎么办 摩拜忘记关锁怎么办 绿萝叶子变软了怎么办 水痘疫苗打了3次怎么办 免疫组化p16阳性怎么办 乙肝五项25为阳怎么办 苏宁快递丢件了怎么办 新房苯超标10倍怎么办 结婚后遇到真爱怎么办 除皱针眉毛上扬怎么办