cheditor로 올린 파일을 DB에 넣어주기

불당   
   조회 12914   추천 0     비추천 0    

아드니라님의 팁에서 발생하는 여러가지 문제 (값이 엉키는) 때문에
session을 이용하는 방식으로 전면 재코딩 하려고 했는데, 너무 짜증이 나더라구요.
이런저런 조건을 맞춘다는게 힘들고 case도 너무 많고.
 
그래서, 불당 resize 코드를 수정해서 write_update.php에서 모두 처리하게 코딩을 바꿨습니다.
write_update.php를 하면서 정확하게 cheditor로 첨부된 이미지의 용량을 읽을 수 있기 때문에
게시글별로 제한된 이미지 용량이 초과하는 글에 대해서는 쓰기를 못하게 하는 것도 가능합니다.
write.skin.php에서 수정된 이미지의 용량을 정확하게 계산 못하는 허점을 이용하는 경우가 있는데
이런 것도 완벽하게 응징 가능 합니다.
 
뿐만 아니라 웹 편집기로 올린 이미지가 지워지면, 아미지 파일도 같이 싹~ 지워 집니다.
 
이미지를 올리고, 그냥 편집 모드에서 지우면 파일이 남는다는 것이죠.
에휴...
 
이 문제에 대한 답은 tempsave(임시저장)의 세션을 이용해서 처리하는 것 입니다.
image를 업로드 하면 무조건 g4_board_cheditor에 넣습니다.
그리고, 이것을 세션 값으로 비교해서,
최종 결과에 이미지 정보가 없는 경우에,
파일정보를 지우면서 파일도 지워버리는 것이죠.
그러면, cheditor를 이용해도 단 하나의 쓰레기도 남지 않고 완벽 관리가 됩니다.
 
300G SAS의 용량이 80%에 육박하고 있어서... 절박한 문제거든요.
자~ 따라해 보세요.
DISK도 돈이다~!!! 
 
===
 
테이블을 만들고 config.php에 테이블을 정의 합니다. 
 
$g4['board_cheditor_table'] = $g4['table_prefix'] . "board_cheditor";     // chediotr 파일 관리 테이블
 
CREATE TABLE IF NOT EXISTS `g4_board_cheditor` (
  `bc_id` int(11) NOT NULL AUTO_INCREMENT,
  `bo_table` varchar(255) NOT NULL DEFAULT '',
  `wr_id` int(11) DEFAULT NULL,
  `bc_url` varchar(255) NOT NULL,
  `bc_dir` varchar(255) NOT NULL,
  `bc_source` varchar(255) NOT NULL,
  `bc_file` varchar(255) NOT NULL,
  `bc_filesize` int(11) NOT NULL,
  `bc_width` int(11) NOT NULL,
  `bc_height` smallint(6) NOT NULL,
  `bc_type` tinyint(4) NOT NULL,
  `bc_datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `bc_ip` varchar(255) NOT NULL,
  `mb_id` varchar(255) NOT NULL,
  `del` tinyint(4) NOT NULL,
  `wr_session` varchar(255) NOT NULL,
  PRIMARY KEY (`bc_id`),
  KEY `bo_table` (`bo_table`,`wr_id`),
  KEY `mb_id` (`mb_id`),
  KEY `bc_file` (`bc_file`),
  KEY `wr_session` (`wr_session`)
)
 
 
bbs/write_update.php에 아랫부분에 아래코드를 추가 하는 것으로 모든 작업을 실행.
참 쉽습니다.
 
// ------------------------------------------------------------
// 불당팩 - DHTML 이용시에 cheditor 정보 기록하기
if($board['bo_use_dhtml_editor'])
{
    // 전달해줄 글로벌 변수를 설정
    $g4['w'] = "u";
    $g4['bo_table'] = $bo_table;
    $g4['wr_id'] = $wr_id;
    $g4['ip_addr'] = $remote_addr;
    // $w == "u"이면, 현재 글의 db의 del 필드를 모두 1로 설정 합니다.
    if ($w == "u") {
        $sql = " update $g4[board_cheditor_table] set del = '1' where bo_table = '$bo_table' and wr_id = '$wr_id' ";
        sql_query($sql, FALSE);
    }
    // 순수 html code로 바꿔서 callback을 불러 줍니다.
    preg_replace_callback('/\<img[^\<\>]*\>/i', 'get_chimage', stripslashes($wr_content));
   
    // $w == "u"이면, 현재글의 db의 del 필드중 1인 것을 모두 삭제 합니다. 확실한 쓰레기 청소.
    if ($w == "u") {
        $sql = " select * from $g4[board_cheditor_table] where bo_table = '$bo_table' and wr_id = '$wr_id' and del = '1' ";
        $result3 = sql_query($sql);
        while ($row=sql_fetch_array($result3)) {
              $file_path = $row[bc_dir] . "/" . $row[bc_file];
              $file_dir = $row[bc_dir];
              @unlink($file_path);
              $sql_d = " delete from $g4[board_cheditor_table] where bc_id = '$row4[bc_id]' ";
              sql_query($sql_d);
        }
    }
   
    // 올리고 지워버린 쓰레기들을 청소해 줍니다.
    $sql = " select * from $g4[board_cheditor_table] where bo_table = '' and wr_session = '$ss_tempsave' ";
    $result4 = sql_query($sql);
    while ($row4=sql_fetch_array($result4)) {
          // 이렇게 잘라줘야 제대로 된 경로가 나온다 - b4.lib.php와는 자르는 방법이 좀 다릅니다.
          $fl = explode("/$g4[data]/",$row4[bc_dir]);
          $rel_path = "../" . $g4[data] . "/" . $fl[1];
          $file_path = $rel_path . "/" . $row4[bc_file];
          @unlink($file_path);
          $sql_d = " delete from $g4[board_cheditor_table] where bc_id = '$row4[bc_id]' ";
          sql_query($sql_d);
    }
}
 
cheditor5/imageUpload/upload.php에 아래 코드를 추가 합니다.
 
// 불당팩 - 올라가는 모든 image 파일을 체크
$sql = " insert into $g4[board_cheditor_table]
            SET
                mb_id = '$member[mb_id]',
                bc_dir = '" . SAVE_DIR . "',
                bc_file = '$random_name',
                bc_source = '$filename',
                wr_session = '$_SESSION[ss_tempsave]'
        ";
sql_query($sql);
 
 
마지막으로 get_chimage 함수를 lib/b4.lib.php에서 가져다가 common.lib.php 넣던지
b4.lib.php를 common.lib.php 마지막에 include 하던지 하면 됩니다.
- opencode.co.kr -
불당 2011-10
http://www.opencode.co.kr/bbs/board.php?bo_table=gnu4_tips&wr_id=650

위의 팁을 같이 써야 한 세트가 됩니다.
위 팁을 안 쓸 경우에는 세션 만들고 없애는 부분만 추가해야 하구요.


제목Page 11/28
2011-10   12915   불당
2011-09   11103   불당
2011-09   14385   불당
2011-09   13913   불당
2011-09   10853   불당
2012-04   11653   불당
2011-09   11123   불당
2011-09   13394   불당
2011-09   11819   불당
2011-09   14516   불당
2011-09   19221   불당
2011-08   27561   불당
2011-08   11668   불당
2011-08   12890   불당
2011-08   14627   불당
2011-07   11922   불당
2011-07   12630   불당
2011-07   13741   불당
2011-07   15527   불당
2011-07   14603   테스터