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} ] 張圖片";          //控制檯輸出結果
    }
}

 

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