聯系信息

                        php刪除網站中不曾調用的圖片(垃圾文件)的方法

                        2020-12-18 15:45 By 致遠 3239
                        當前位置: 企業網站建設 > ThinkPHP > php刪除網站中不曾調用的圖片(垃圾文件)的方法

                        如題。網站程序本身的不完善,導致網站運行時間越久垃圾文件就越多,人為去處理那些垃圾文件是不現實的,還好php能幫我們搞定。

                        如:寫一篇文章,文章中有配圖,而在刪除這篇文章的時候并沒有刪除相關圖片,那么這些圖片就是孤立的、沒有用的,也就是我前面提到的垃圾文件。由于此類操作,尤其是門戶網站,將會嚴重占用硬盤空間,甚至影響網絡響應速度。

                        原理其實很簡單:

                        1、遍歷素材文件夾(一般為上傳文件夾,正常的話只有一個總的目錄,如果有多個,那就多次遍歷吧)

                        2、遍歷其下的所有文件夾及其文件

                        3、查詢數據庫相關字段看該文件是否有引用,如果有,繼續下一個文件的判斷,如果沒有,刪除。

                        這里會有幾個問題

                        1、速度上并不理想,好在比沒有辦法要好一點點

                        2、查詢數據庫的時候一定要確保所有可能調用的數據表及其字段,否則~恭喜你,你可以跑路了!

                        核心代碼如下:


                        set_time_limit(0);
                        $floder=$this->_folder('/upfiles/');//讀取文件目錄中的所有子目錄,我這里upfiles下沒有直接存放文件,都在子目錄中,所以沒有處理這里的文件
                        foreach ($floder as $value) {
                            $pics=$this->_readPic('./upfiles/'.$value);//讀取目錄中的所有文件
                            foreach ($pics as $val) {
                                $pic=trim($val,'.');//格式化圖片地址,因為數據庫中存放的沒有.
                                $ex=M('Article')->where('cont like "%'.$pic.'%"')->find();
                                if($ex) continue;//查詢一個表會調用該圖片的一個字段,如果找到了就沒必要繼續查其他表及其他字段了
                                $ex=M('Pics')->where('pics like "%'.$pic.'%"')->find();
                                if($ex) continue;
                                $ex=M('User')->where('pic="'.$pic.'"')->find();
                                if($ex) continue;
                                unlink(APP_PATH.trim($pic,'/'));//刪除文件
                            }
                        }


                        讀取文件夾的子函數:


                        private function _folder($path) {
                            $path=getcwd()."\\".$path;
                            $handle = opendir($path);
                            $itemArray=array();
                            while (false !== ($file = readdir($handle))) {
                                $floder=$path.$file;
                                if (($file=='.')||($file=='..')){
                                }elseif (is_dir($floder) && !stripos($floder,'-')) {
                                        $itemArray[$file]=$file;
                                    }else{
                                        //array_push($itemArray, $file);
                                    }
                                }
                            return $itemArray;
                        }


                        讀取文件的子函數:


                        private function _readPic($path){
                            $dir .= substr($dir, -1) == '/' ? '' : '/';
                            $dirInfo = array();
                            foreach (glob($dir.'*') as $v) {
                                if(stripos($v,'thumb_')) continue;
                                $dirInfo[] = $v;
                                if(is_dir($v)){
                                    $dirInfo = array_merge($dirInfo, $this->_readPic($v));
                                }
                            }
                            return $dirInfo;
                        }


                        © 致遠 2020-12-18,原創內容,轉載請注明出錯:php刪除網站中不曾調用的圖片(垃圾文件)的方法

                        留下您的評論

                        > 人人爽人人澡人人高潮_免费无码国产V片在线观看_18禁裸乳无遮挡免费观看_国产99在线 | 欧美_中文字幕无码无码专区 请狼友们记住最新域名 国产FREEXXXX性麻豆 久久国产免费直播 久久久久精品国产三级 国产精品IGAO视频网 18禁美女裸身无遮挡免费网站 亚洲国产精品日韩AV不卡在线 国产草草影院CCYYCOM 无码国内精品久久人妻蜜桃 精品一区二区三人妻视频