RE : 게시물 삭제시 게시판테이블은 지워지는데 파일 테이블은 안지워 지네요 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

RE : 게시물 삭제시 게시판테이블은 지워지는데 파일 테이블은 안지워 지네요 정보

RE : 게시물 삭제시 게시판테이블은 지워지는데 파일 테이블은 안지워 지네요

본문

게시물 테이블은 1개가 있습니다.
실제로 게시판에도 글은 1개가 있습니다.

그런데 파일 테이블을 보면 이전에 지운 데이터가 안지워지고 그대로 있습니다.
그래서 그런지 업로드 폴더를 보면 업로드된 파일도 그대로 있습니다.

어디부터 점겸을 해봐야될까요?
아이고 머리야~

동영상 게시판을 만들고 있어서 업로드 하나를 하게 되면3개의 파일이 저장됩니다.
업로드한 원본파일, 인코딩후 생성된 mp4파일, 썸네일용 jpg파일 이렇게 3개가 생깁니다.
file_delete.php 파일에서
@unlink("$g4[path]/data/$bo_table/$row[bf_file]");
@unlink("$g4[path]/data/$bo_table/$row[bf_file].jpg");
@unlink("$g4[path]/data/$bo_table/$row[bf_file].mp4");

이렇게 추가하면 3개파일 다 지워질까요??

bf_file이 원본파일이름이 들어가는거 확장자까지 저장되잖아요...
test.wmv 요런식으로~~
$row[bf_file].jpg -> test.wmv.jpg 이런씩으로 되는거죠??
그럼 jpg는 파일이 없으니까 안지워지는거죠??

$name = urlencode($row[bf_file]);
$temp = explode(".",$name);
$del_name = $temp[0];
@unlink("$g4[path]/data/$bo_table/$row[bf_file]");
@unlink("$g4[path]/data/$bo_table/$del_name.jpg");
@unlink("$g4[path]/data/$bo_table/$del_name.mp4");

이게 맞는건가요??
프로그램은 했는데 sql에서 안지워니까 확인이 잘 안되네요^^

========================== file_delete.php ===============================


<?
include_once("_common.php");

if (!trim($bo_table)) exit;

if ($wr_id)
{
    $sql = "select * from g4_board_file_movie where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$bf_no'";
    $row = sql_fetch($sql);

$name = urlencode($row[bf_file]);
$temp = explode(".",$name);
$del_name = $temp[0];

    @unlink("$g4[path]/data/$bo_table/$row[bf_file]");
@unlink("$g4[path]/data/$bo_table/$del_name.jpg");
@unlink("$g4[path]/data/$bo_table/$del_name.mp4");
    @unlink("$g4[path]/data/$bo_table/thumbnail/$wr_id");
    @unlink("$g4[path]/data/$bo_table/thumbnail2/$wr_id");
    @unlink("$g4[path]/data/$bo_table/thumbnail3/$wr_id");

    $sql = "delete from g4_board_file_movie where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_no = '$bf_no'";
    $qry = sql_query($sql);
}
else
{
    $sql = "select * from guploader where bo_table = '$bo_table' and bf_no = '$bf_no' and mb_id = '$member[mb_id]' and bf_ip = '$_SERVER[REMOTE_ADDR]'";
    $row = sql_fetch($sql);

    @unlink("$g4[path]/data/guploader/$row[bf_file]");

    $sql = "delete from guploader where bo_table = '$bo_table' and bf_no = '$bf_no' and mb_id = '$member[mb_id]' and bf_ip = '$_SERVER[REMOTE_ADDR]'";
    $qry = sql_query($sql);
}
?>

========================== file_upload.php ============================
<?
include_once("_common.php");

if ($wr_id)
    $board_file_path = "$g4[path]/data/$bo_table";
else
    $board_file_path = "$g4[path]/data/guploader";

// 디렉토리가 없다면 생성합니다. (퍼미션도 변경하구요.)
@mkdir("$board_file_path", 0707);
@chmod("$board_file_path", 0707);

$upload  = array();
$tmp_file = $_FILES['Filedata']['tmp_name'];
$filename = $_FILES['Filedata']['name'];
$filesize = $_FILES['Filedata']['size'];

if (!is_uploaded_file($tmp_file)) exit;

// 파일명 charset
if (strtolower(str_replace("-", "", $g4[charset])) == "euckr") {
    $tmp_name = @iconv("utf-8", "cp949", $filename);
    if (!$tmp_name)
        $tmp_name = @mb_convert_encoding($str, "cp949", "utf-8"); 
    if (!$tmp_name)
        exit;
    $filename = $tmp_name;
}

$upload['source'] = $filename;
$upload['filesize'] = $filesize;
$timg = @getimagesize($tmp_file);

// 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
$filename = preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)$/i", "$0-x", $filename);

// 접미사를 붙인 파일명
$upload['file'] = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr(md5(uniqid($g4['server_time'])), 0, 8).'_'.str_replace('%', '', urlencode($filename));

$dest_file = "$board_file_path/$upload[file]";

// 업로드가 안된다면 에러메세지 출력하고 죽어버립니다.
$error_code = move_uploaded_file($tmp_file, $dest_file) or die($_FILES['Filedata']['error']);

// 올라간 파일의 퍼미션을 변경합니다.
chmod($dest_file, 0606);

$bf_no = 0;

if ($wr_id) {
    $sql = "select max(bf_no) as bf_no from g4_board_file_movie where bo_table = '$bo_table' and wr_id = '$wr_id'";
    $row = sql_fetch($sql);
    if ($row[bf_no] >= 0)
        $bf_no = $row[bf_no] + 1;

    $sql = " insert into g4_board_file_movie
                set bo_table = '$bo_table'
                    ,wr_id = '$wr_id'
                    ,bf_no = '$bf_no'
                    ,bf_source = '$upload[source]'
                    ,bf_file = '$upload[file]'
                    ,bf_filesize = '$upload[filesize]'
                    ,bf_width = '$timg[0]'
                    ,bf_height = '$timg[1]'
                    ,bf_type = '$timg[2]'
                    ,bf_datetime = '$g4[time_ymdhis]'";
    $qry = sql_query($sql);
} else {
    $sql = "select max(bf_no) as bf_no from guploader where bo_table = '$bo_table' and mb_id = '$mb_id' and bf_ip = '$_SERVER[REMOTE_ADDR]' ";
    $row = sql_fetch($sql, false);
    if ($row[bf_no] >= 0)
        $bf_no = $row[bf_no] + 1;

    $sql = " insert into guploader
                set bo_table = '$bo_table'
                    ,bf_no = '$bf_no'
                    ,mb_id = '$mb_id'
                    ,bf_source = '$upload[source]'
                    ,bf_file = '$upload[file]'
                    ,bf_filesize = '$upload[filesize]'
                    ,bf_width = '$timg[0]'
                    ,bf_height = '$timg[1]'
                    ,bf_type = '$timg[2]'
                    ,bf_datetime = '$g4[time_ymdhis]'
                    ,bf_ip = '$_SERVER[REMOTE_ADDR]'";
    $qry = sql_query($sql, false);

}
?>
균이 님이 파일을 어떤식으로 올리냐고 하시길래
ㅎㅎ 잘 몰라서 다 올렸어요

동영상 업로드를 하면 guploader 파일에 업로드 되고 글쓰기 완료를 누르면
게시판이름의 폴더로 복사가 됩니다. guploader폴더는 잘 지워집니다.
동영상폴더로 복사된 파일을 ffmpeg을 이용해서mp4파일과 jpg파일이 만들어집니다.
하나의 게시물에 총 3개의 파일이 되는거죠
여기까지도 잘 됩니다.
그런데 지우기를 하면 파일은 하나도 안지워 지고 파일테이블에도 그대로 있네요
  • 복사

댓글 전체

bbs/delete.php, bbs/delete_all.php 에 보면 화일 삭제 코드가 있습니다
이곳에 덧붙여서
ffmpeg을 이용해서mp4파일과 jpg파일이 만들어집니다<-- 여기서 만든 화일을 삭제하는 코드를
추가해야겠군요

위의 소스는 멀티업로드 자체에서 화일을 추가, 삭제하는 경우 사용하는 것이지 게시물을 삭제하는 경우와는
전혀 상관이 없습니다
© SIRSOFT
현재 페이지 제일 처음으로