PHP根据文件夹删除异常文件,删除重复文件

                                                   PHP根据文件夹删除异常文件,删除重复文件

 

一、图片去重控制台打印的日志

二、实现代码

<?php

namespace app\index\controller;

class Ablog extends Base
{
    public function test5(){
        $dir = 'H:.\.\.\imgs';    //待处理的文件所在路径

        self::deletePicture($dir);      //删除异常文件

        self::replyPicture($dir);   //删除重复文件

        exit();
    }

    /**
     * 图片删除
     * 这个比较快:直接在浏览器执行
     * @param $dir 待删除的文件路径
     */
    public function deletePicture($dir){
        $deleteNumber = 0;
        $fileNames = scandir($dir);    //获取到所有文件
        foreach ($fileNames as $fileName){
            $lastIndex = strpos($fileName, '.');    //元素最后一次出现的位置
            if ($lastIndex != 9){   //过滤掉文件夹:根据实际情况判断
                continue;
            }

            $fileDir = $dir . "\\" . $fileName; //文件的全路径
            $fileSize = filesize($fileDir);     //$fileSize为0,177居多,为异常文件,这里判断<200就行了
            if ($fileSize < 200){   //自定义规则:文件字节 <200 视为异常文件,执行删除。
                unlink($fileDir);   //删除文件
                $deleteNumber ++;   //删除数量+1
            }
        }
        echo "删除了 [ {$deleteNumber} ] 张图片"; //输出结果
    }

    /**
     * 图片去重(md5_file计算文件md5散列)
     * 这个比较慢,在控制器执行:Tp框架下命令行执行 php index.php /index/Ablog/test5
     * @param $dir 待去重的文件路径
     */
    public function replyPicture($dir){
        set_time_limit(0);  //设置永不超时
        $replyNumber = 0;   //记录去重的数量
        $index = 0;         //记录执行到第几张图片
        $md5FileArray = []; //存放文件的 md5_file值
        $fileNames = scandir($dir);    //获取到所有文件
        foreach ($fileNames as $fileName){
            $lastIndex = strpos($fileName, '.'); //元素最后一次出现的位置
            if ($lastIndex != 9){   //过滤掉文件夹:根据实际情况判断
                continue;
            }

            $fileDir = $dir . "\\" . $fileName; //文件的全路径
            $md5File = md5_file($fileDir);      //计算文件的md5散列
            if (in_array($md5File, $md5FileArray)){ //文件重复去重(删除)
                unlink($fileDir);   //删除文件
                $replyNumber ++;    //去重数量+1
                echo "文件 [ {$fileName} ] 重复,已删除" . PHP_EOL;
            }else{
                $md5FileArray[] = $md5File;
            }

            $index ++;  //图片偏移1位,用于查看执行到第几张了
            echo "处理第 [ {$index} ] 张图片" . PHP_EOL;  //控制台输出结果
        }
        echo "去重了 [ {$replyNumber} ] 张图片";          //控制台输出结果
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章