테스트 사이트 - 개발 중인 베타 버전입니다

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

Darcy 7년 전 조회 2,211

</p>

<p><?php

$sub_menu = '100920';

include_once('./_common.php');</p>

<p>if ($is_admin != 'super')

    alert('최고관리자만 접근 가능합니다.', G5_URL);</p>

<p>$g5['title'] = '없는 게시물 파일 일괄삭제';

include_once('./admin.head.php');

?></p>

<p><div class="local_desc01 local_desc">

    <p>

        완료 메세지가 나오기 전에 프로그램의 실행을 중지하지 마십시오.

    </p>

</div></p>

<p><?php

$directory = array();

$dl = array('file', 'file2');</p>

<p>foreach($dl as $val) {

    $dir = G5_DATA_PATH.'/'.$val;</p>

<p>    if(!is_dir($dir)) continue;</p>

<p>    if($handle = opendir($dir)) {

        while(false !== ($entry = readdir($handle))) {

            if($entry == '.' || $entry == '..')

                continue;</p>

<p>            $path = G5_DATA_PATH.'/'.$val.'/'.$entry;</p>

<p>            if(is_dir($path))

                $directory[] = $path;

        }

    }

}</p>

<p>flush();</p>

<p>if (empty($directory)) {

    echo '<p>디렉토리를 열지못했습니다.</p>';

}</p>

<p>$cnt=0;

echo '<ul>'.PHP_EOL;</p>

<p>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;

            }</p>

<p>            $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'];</p>

<p>          

            $sql2 = "SELECT count(*) as cnt FROM g5_board_file WHERE bf_file = '$filename'";

            $ret2 = sql_fetch($sql2);

            $ct += $ret2['cnt'];

 </p>

<p>            if( !$ct ) {

                $cnt++;

                echo '<li> filename : '.$dir.'/'.$filename.' : '.$ct.'</li>'.PHP_EOL;

                @unlink($dir.'/'.$filename);

            }</p>

<p>            flush();</p>

<p>            if ($cnt%10000==0) {

                echo PHP_EOL;

                break;

            }

        }

        

        // 핸들 해제 

        closedir($handle);

    }

}</p>

<p>echo '<li>완료됨</li></ul>'.PHP_EOL;

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

?></p>

<p><?php

include_once('./admin.tail.php');

?></p>

<p>

 

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

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

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

답변 1개

채택된 답변
+20 포인트
플라이
7년 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

로그인