갤러리스킨에서 이미지 수정시 썸네일의 변동 및 삭제에 관한 문제... > 그누4 질문답변

그누4 질문답변

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

갤러리스킨에서 이미지 수정시 썸네일의 변동 및 삭제에 관한 문제... 정보

갤러리스킨에서 이미지 수정시 썸네일의 변동 및 삭제에 관한 문제...

본문

예전에도 이와 비슷한 글을 올렸던 적이 있었습니다.
잘 해결되었다고 생각했었는데, 또 다른 문제가 좀 있는듯 해서요.
 
일단 제가 예전에 쓰던 갤러리의 경우 사진을 등록한후 그 사진을 수정을 하면 썸네일이 안바뀌고 예전이미지의 썸네일이 그대로 남아 있었습니다.
오늘도 갤러리 스킨 몇가지 다운받아 테스트 해봤지만 몇몇 갤러리는 여전히 그런 현상이 있네요.
 
그당시 해결방법이
 
list.skin.php 중에서
 
$thumb = $thumb_path.'/'.$list[$i][wr_id]; 이런식으로 되어 있는걸
$thumb = $thumb_path.'/' . $filename; 와 같은 방법으로 모두 바꾸어서 사용하면
깔끔하게 해결이 되었습니다.
지금까지 그대로 사용을 했었구요.
 
그런데 문제는 이런식으로 사용했을 경우
/그누보드/data/file/해당게시판테이블/thumb/안에 생성되어 있던 썸네일들은 삭제가 되지 않고 계속 쌓이게 되더군요.
 
예를들면 지금 갤러리에 총 2개의 게시물이 있는데 그중 한 게시물의 이미지를 다른 이미지로 교체하여 수정하면 썸네일은 바뀐것으로 제대로 보여지지만, 위 폴더에 들어가보면 썸네일수는 2개가 아니고 3개가 됩니다.
또 수정하면 4개... 계속 이런식으로...
 
갤러리내의 모든 이미지들을 삭제해도 썸네일들은 그냥 남아 있게 되지요.
게시판을 아예 삭제해 버리거나 아니면 하나 하나 해당 썸네일을 지워주지 않으면 계속 저렇게 쌓여 가는 겁니다.
 
그러다가,
관리자님께서 올리신 [갤러리] 스킨을 알게 되어 적용해 봤습니다.
 
/그누보드/data/file/해당게시판테이블/thumb/ 에서도 썸네일 삭제 잘되고 이미지 수정시에도 썸네일이 변하기는 하네요.
 
그런데... 문제는 이미지를 수정을 했을 경우, 일단은 리스트에서 썸네일 이미지는 예전 이미지가 보여지네요. 다른 페이지를 들어갔다가 다시 들어와도...
무조건 새로고침을 해야만 수정한 이미지로 썸네일이 보여집니다.
 
그래서 이것 역시 list.skin.php 에서
 
$thumb = $thumb_path.'/'.$list[$i][wr_id]; 부분을
$thumb = $thumb_path.'/' . $filename; 이런식으로 다시 바꾸어 주었더니,
이미지를 수정할적에 게시판 상에서틑 썸네일도 바로 바로 변경이 되기는 하지만,
 
역시나
/그누보드/data/file/해당게시판테이블/thumb/ 에서는 썸네일들이 계속 쌓여만 가고...
 
여기서 질문 드리겠습니다.
 
1.
관리자님의 갤러리 스킨을 그냥 이용하면서도 새로고침을 안누르고 수정한 이미지가 바로 썸네일로 뜨는 방법이 혹시 있을런지요...?
 
2.
아니면 $filename를 이용했을시
/그누보드/data/file/해당게시판테이블/thumb/ 에서 생성된 썸네일들이 게시판에서 그 이미지를 삭제하거나 수정을 하면
자동으로 폴더안에서 삭제되게 할수 있는 방법이 있을런지요...?
 
혹시 방법을 아시는분들 제발 도움 좀 주세요.
 
부탁 드리겠습니다.
  • 복사

댓글 전체

$thumb = $thumb_path.'/' . $filename; 으로 사용하는 것이 캐시의 영향을 받지않으므로 여러모로 좋습니다.

제경우 썸네일 정리를 위해 유창화님께서 만들어 주신 별도파일을 사용하고 있습니다.
데이타 폴더와 썸네일 폴더를 비교 >> 데이타 폴더에 없는 썸네일은 모두 삭제하는 방법입니다.
제경우 겟방식으로 호출해서 팝업창에서 실행하도록 사용합니다.
<a href='#' onclick="javascript:window.open('<?=$board_skin_path?>/restore_thumb.php?bo_table=<?=$bo_table?>','pop_delete','width=300,height=200,top=250,left=300,scrollbars=no,resizeable=no,toolbar=no,status=no')">썸네일정리</a>
추가로 썸네일 폴더에 확장자가 없는 파일까지 삭제하려면 썸네일을 읽어들이는 루틴에서
if (preg_match("'\.(jp[e]?g|gif|png)$'i", $entry)) { 조건을 주석처리하시면 됩니다.
참고하세요.

restore_thumb.php 전체 코드
<?php
//불필요한 썸네일 정리를 위한 소스코드 - 유창화님

//실행되는 동안 종료 되지 않도록 사용메모리와 실행가능 시간을 늘려준다.
@set_time_limit (0);
@ini_set ("memory_limit", "20M");

//겟으로 넘어온것만 받아서 처리
$g4_path = '../../..';//상대경로지정
$bo_table = $_GET['bo_table'];
$data_path = $g4_path . "/data/file/" . $bo_table;
$thumb_path = $data_path . '/thumb';

//$bo_table 이 넘어오지 않으면 스크립트 종료
if (empty($bo_table)) exit;

include_once($g4_path . "/common.php");

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

@mkdir($data_path, 0707);
@chmod($data_path, 0707);
@mkdir($thumb_path, 0707);
@chmod($thumb_path, 0707);

if (!is_dir($data_path) || !is_dir($thumb_path)) {

  echo '필요한 디렉토리가 존재하지 않으며, 생성할수 도 없습니다.<br>퍼미션이나 기타다른 부분을 확인 하세요.';
  exit;
}

$imgfiles =  Array();

//게시판 데이타 디렉토리에서 확인
$d = dir($data_path);
while (false !== ($entry = $d->read())) {

  if (preg_match("'\.(jp[e]?g|gif|png)$'i", $entry)) {

    $imgfiles[] = $entry;
    //echo $entry;
  }
}
$d->close();

//썸네일 디렉토리에서 확인
$d = @dir($thumb_path);
while (false !== ($entry = $d->read())) {

  if (preg_match("'\.(jp[e]?g|gif|png)$'i", $entry)) {

    if (in_array ($entry, $imgfiles) == false){

      @unlink($thumb_path . "/" . $entry);
    }
  }
}
$d->close();

echo "필요없는 썸네일을 삭제처리 완료 하였습니다.";

?>
<script type="text/javascript" language="JavaScript">
opener.location.reload();
window.close();
//self.close();
</script><?
 //echo("<script>location.replace('".$g4['bbs_path']."/board.php?bo_table=".$bo_table."&wr_id=".$wr_id."&page=".$page."');</script>");
?><a href="javascript:parent.window.close();"> 창닫기</a>
모든 분들 답변 감사합니다.

Photofly 님께서 알려주신 방법은 wr_id 일때 사용하는 방법인거 같네요.
그런데 지금 사용하는 소스 자체가 wr_id 를 사용할때는 제가 썼던것처럼 썸네일 자동으로 다 삭제가 되고 있습니다.
단지 게시판에서 새로고침을 꼭 눌러야만 이미지가 변할뿐이구요.

플록님께서 알려주신 소스를
정화히 어디다가 넣어서 실행을 해야 하는건지요...?

1. 이것은 어디다가 넣어야 하는건지요...?
따로 파일을 만들어서 넣어야 한다면 플록님께서는 어느 폴더에 넣으셨는지요...?

<a href='#' onclick="javascript:window.open('<?=$board_skin_path?>/restore_thumb.php?bo_table=<?=$bo_table?>','pop_delete','width=300,height=200,top=250,left=300,scrollbars=no,r
esizeable=no,toolbar=no,status=no')">썸네일정리</a>

2. restore_thumb.php 파일역시 어디다 넣어서 실행을 해야 하는건지요?

위 두파일을 이곳 저곳에 넣어서 실행을 해봤지만 도저히....

3. 마지막으로 위 소스들중에서 수정해줘야 할거는
$g4_path = '../../..';//상대경로지정  이거 하나 인지요?
맞다면 이것도 수정방법 예시좀 주시면 안될까요...? 이리 저리 해봐도 안되서요.

그러니 1, 2 번 어느 폴더에 집어 넣어야 하는지,
그에 맞게 3번은 어떤 식으로 수정하면 되는건지 좀 부탁드리겠습니다.
그외에도 수정해줘야 할부분이 있는지도...
아래 코드를 리스트 스킨 하단 <? if ($is_checkbox) { ?> 삭제, 복사, 이동 버튼들이 있는 바로아래 넣어주시면 관리자 모드에서만 링크가 보입니다.
<? if ($is_checkbox) { ?>
각종버튼~~~
<a href='#' onclick="javascript:window.open('<?=$board_skin_path?>/restore_thumb.php?bo_table=<?=$bo_table?>','pop_delete','width=300,height=200,top=250,left=300,scrollbars=no,r
esizeable=no,toolbar=no,status=no')">썸네일정리</a> <? } ?>
이런식이 되겠죠?!

//-----

restore_thumb.php 파일은 경로 변경없이 그대로 list.skin.php 파일이 있는 스킨폴더에 저장합니다.

위 코드대로 수정없이 저장후 실행시키면 조그만 팝업창이 떴다가 완료되면 자동으로 닫히면서 기존 화면이 리로드 될겁니다.
플록님 감사합니다.
덕분에 모든거 한방에 해결되었습니다.

그런데 $filename로 했을 경우에는 데이터 디렉토리안에 파일이 자동으로 삭제는 안되는건가요?
© SIRSOFT
현재 페이지 제일 처음으로