우리가 사는 세상을 모두 알기엔 인생은 너무 짧다.!!

사이트관리/그누보드 소스

그누보드 data/editor 안의 자동 생성 파일 자동삭제

거북선인 2019. 4. 22. 12:33
반응형

그누보드 data/editor 안의 자동 생성 파일 자동삭제


https://sir.kr/g5_tip/8858 
or 
https://sir.kr/g5_tip/6570 


DHTML 에디터 때문에 생기는 쓰레기 이미지를 한번에 정리 (무식하게)

admin.menu100.php

editor_file_delete.php


보통 스마트에디터 등의 DHTML 에디터를 많이 사용하지만,

한번 올린 이미지는 삭제되지 않고, 계속 쌓이기만 합니다.

 

쓸데없이 서버의 디스크 공간만 차지 하고, 쓰이지도 않는 이미지 파일들을 한번에 정리하고자 만들었습니다.

무식하게 파일마다, 모든 DHTML 에디터를 사용한 Table이 있는지 다 뒤져서 판별하기 때문에 서버에 많은 부하를 줄 수 있습니다.

사용하실 분은 꼭 소스 확인 해 보시고, 이해를 하신 뒤에 쓰시기를 권장합니다.

 

업무가 바쁜 관계로 후다닥 만들어서 완성도에 문제가 있을 수 있으므로,

사용하실 분들은 꼭 /data/editor 폴더를 백업 해두고 쓰시기 바랍니다.

문제 생겨도 책임 못져요 (필요한 파일 다 날릴 수 있음) ㅠ.ㅠ

 

사족으로 전체 몇개의 파일중에 몇개를 삭제 했으며, 삭제한 용량이 얼마인지 표시되게 하였습니다.

사용해 보시고, 개선해야 할 사항 있으시면 알려주세요.

 

설치할 폴더는 /adm 입니다.

영카트에도 쓸 수 있습니다.

 

* 추신 : 게시판이 많거나, 게시물이 많거나, editor 로 올린 이미지가 많을 경우에 서버에 엄청난 부하가 생길수 있으니 주의하시기 바랍니다.





에디터로 올린 이미지 삭제하는 코드 (썸네일도 삭제)

현재 그누보드는 에디터로 첨부한 이미지는 글 삭제시에도 함께 삭제되지 않고 서버에 남아있습니다.

아래 코드를 적용하시면 에디터로 첨부한 이미지가 있는 글을 삭제할 경우 해당 이미지도 삭제하게 됩니다.

 

/lib/common.lib.php 에서 기존 

 

// 에디터 썸네일 삭제
function delete_editor_thumbnail($contents)
 

함수 내용을 아래와 같이 변경한다.

 

// 에디터 썸네일 삭제
function delete_editor_thumbnail($contents)
{
    if(!$contents)
        return;

    // $contents 중 img 태그 추출
    $matchs = get_editor_image($contents, false);

    if(!$matchs)
        return;

    for($i=0; $i<count($matchs[1]); $i++) {
        // 이미지 path 구함
        $imgurl = @parse_url($matchs[1][$i]);


        if(strpos($imgurl['path'], "/data/") != 0) {
            $data_path = preg_replace("/^\/.*\/data/", "/data", $imgurl['path']);
        } else {
            $data_path = $imgurl['path'];
        }

        $is_destfile = false;
        if(preg_match('/(gif|jpe?g|bmp|png)$/i', strtolower(end(explode('.', $data_path))))){

            $destfile = ( ! preg_match('/\w+\/\.\.\//', $data_path) ) ? G5_PATH.$data_path : '';

            if($destfile && preg_match('/\/data\/editor\/[A-Za-z0-9_]{1,20}\//', $destfile) && is_file($destfile)) {
                $is_destfile = true;
            }
        }
        
        if($is_destfile) {
            //원본파일 삭제
            @chmod($destfile, G5_FILE_PERMISSION);
            @unlink($destfile);
            
            //썸네일파일 삭제
            $files = glob(dirname($destfile).'/thumb-'.preg_replace("/\.[^\.]+$/i", "", basename($imgurl['path'])).'*');
            //return $files;
            if (is_array($files)) {
                foreach($files as $filename)
                    unlink($filename);
            }
            
        }


    }
}

반응형