채택완료

없는 게시물 파일 일괄삭제 질문 입니다.

Copy
<?php
$sub_menu = '100920';
include_once('./_common.php');

if ($is_admin != 'super')
    alert('최고관리자만 접근 가능합니다.', G5_URL);

$g5['title'] = '없는 게시물 파일 일괄삭제';
include_once('./admin.head.php');
?>

<div class="local_desc01 local_desc">
    <p>
        완료 메세지가 나오기 전에 프로그램의 실행을 중지하지 마십시오.
    </p>
</div>

<?php
$directory = array();
$dl = array('file', 'file2');

foreach($dl as $val) {
    $dir = G5_DATA_PATH.'/'.$val;

    if(!is_dir($dir)) continue;

    if($handle = opendir($dir)) {
        while(false !== ($entry = readdir($handle))) {
            if($entry == '.' || $entry == '..')
                continue;

            $path = G5_DATA_PATH.'/'.$val.'/'.$entry;

            if(is_dir($path))
                $directory[] = $path;
        }
    }
}

flush();

if (empty($directory)) {
    echo '<p>디렉토리를 열지못했습니다.</p>';
}

$cnt=0;
echo '<ul>'.PHP_EOL;

foreach($directory as $dir) {
    $files = glob($dir);
    $dirs = explode('/', $dir);
    if ( $dirs[count($dirs)-1] == "lost+found" || $dirs[count($dirs)-1] == "file_name" || $dirs[count($dirs)-1] == "lost+found" ) {
        continue;
    }
//    echo '<li>'.$dir.'</li>'.PHP_EOL;
    if (is_dir($dir)) {
        // 핸들 획득
        $handle  = opendir($dir);
        while(false !== ($filename = readdir($handle))) {
            if($filename == "." || $filename == ".." || $filename == "index.php"){
                continue;
            }

            $sql = "SELECT count(*) as cnt FROM ".$g5[write_prefix].$dirs[count($dirs)-1]." WHERE wr_content LIKE '%$filename%'";
            $ret = sql_fetch($sql);
            $ct = $ret['cnt'];

          
            $sql2 = "SELECT count(*) as cnt FROM g5_board_file WHERE bf_file = '$filename'";
            $ret2 = sql_fetch($sql2);
            $ct += $ret2['cnt'];
 

            if( !$ct ) {
                $cnt++;
                echo '<li> filename : '.$dir.'/'.$filename.' : '.$ct.'</li>'.PHP_EOL;
                @unlink($dir.'/'.$filename);
            }

            flush();

            if ($cnt%10000==0) {
                echo PHP_EOL;
                break;
            }
        }
        
        // 핸들 해제 
        closedir($handle);
    }
}

echo '<li>완료됨</li></ul>'.PHP_EOL;
echo '<div class="local_desc01 local_desc"><p><strong>파일 '.$cnt.'건의 삭제 완료됐습니다.</strong><br>프로그램의 실행을 끝마치셔도 좋습니다.</p></div>'.PHP_EOL;
?>

<?php
include_once('./admin.tail.php');
?>

게시물을 삭제하고 실행을 하면 분명 data/file/폴더 안에 삭제해당 파일이 남아있는데

지우지를 못하네요..어디부분을 수정을 하고 보안을 해야할지 고수님들 좀 알려주세요

답변 1개 / 댓글 1개

채택된 답변
+20 포인트

삭제하는 파일의 data 경로 부분이 제대로 처리되고 있는지 여부 혹은 권한 부분을 체크해 보셔야 할듯 합니다.

답변에 대한 댓글 1개

오토셋 설치 후 로컬에서 실행하면 잘 작동합니다 하지만 vps에서 실행하면 되었다 안되었다 합니다..ㅠ

답변을 작성하려면 로그인이 필요합니다.