그누보드 튜닝 ( common.lib.php - get_list) (08.05.29)

불당   
   조회 8245   추천 0    

upgrade_turning.php (1.1K), Down : 45, 2008-04

/lib/common.lib.php의 get_list 함수를 보면 무조건 get_file 함수를 호출하며
get_file 함수는 해당글에 연관된 파일목록을 무조건 query를 하게 됩니다.

목록 1건에 대해서 첨부파일이 있던 없던 무조건 query가 수행되게 되는데
첨부파일이 있는 것이 많지 않다고 생각하면 이같은 query는 쓸데없는 낭비 입니다.

어차피 파일을 첨부하는 /bbs/write_update.php에서 몇개의 파일이 첨부되는지
알고 있기 때문에 첨부된 파일의 갯수를 db에 저장해 둔다면 get_file을 호출할지
아닐지 금방 판단할 수 있겠죠???

/lib/common.lib.php의 266라인 부근의 get_list 함수에서...

   (원본)

    // 가변 파일
    $list['file'] = get_file($board['bo_table'], $list['wr_id']);

    if ($list['file']['count'])
        $list['icon_file'] = "<img src='$skin_path/img/icon_file.gif' align='absmiddle'>";

   (수정본)
    // 가변 파일 - get_file 함수를 첨부파일 갯수가 0 이상일 때만 실행한다
    if ($list['wr_file_count'] > 0) {
    $list['file'] = get_file($board['bo_table'], $list['wr_id']);

    if ($list['file']['count'])
        $list['icon_file'] = "<img src='$skin_path/img/icon_file.gif' align='absmiddle'>";
    }


/bbs/move_update.php에서 70라인쯤에 아래 코드를 추가 합니다.

                            wr_file_count     = '".$row2[wr_file_count]."',



모든 게시판 파일에 wr_file_count 항목을 tinyint unsigned 타입으로 추가 합니다.
첨부된 프로그램을 쓰면 간단히 됩니다.

신규로 추가되는 게시판에 wr_file_count 필드를 넣기 위해서 /adm/sql_write.php
테이블에 다음항목을 적당하게 추가 합니다.

  `wr_file_count` TINYINT( 4 ) UNSIGNED NOT NULL ",


마지막으로 글쓰기에서 wr_file_count 갯수를 수정해 줍니다.

/bbs/write_update.php의 사용자코드 실행 위에 아래의 코드를 추가 합니다.

// 불당팩

// 첨부파일의 갯수 파악
$sql = " select count(*) as cnt from $g4[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' ";
$result = sql_fetch($sql);

// 첨부파일 갯수 업데이트
$sql = " update $write_table set wr_file_count = '$result[cnt]' where wr_id = '$wr_id' ";
sql_query($sql);

// 사용자 코드 실행
@include_once ("$board_skin_path/write_update.skin.php");

- opencode.co.kr -
곰순이푸 2008-04
(수정본)
    // 가변 파일 - get_file 함수를 첨부파일 갯수가 0 이상일 때만 실행한다
    if ($list['wr_file_count'] > 0) {
    $list['file'] = get_file($board['bo_table'], $list['wr_id']);

    if ($list['file']['count'])
        $list['icon_file'] = "<img src='$skin_path/img/icon_file.gif' align='absmiddle'>";
    }

수정후 게시글 복사시 파일복사 안되는현상 해결 하셧나요?
     
불당 2008-04
깜박했어요. ㅠ..ㅠ...
Rino 2008-05
파일 호출시 리스트 페이지와 뷰페이지의 호출 내용이 같은데요...

보드 설정에서요 목록에서 파일 보기 체크란 하나 더 추가 하면..^^

일반게시판 같은 경우 아예 호출을 할 필요가 없잔아요..^^
     
불당 2008-05
만들까 말까 고민하다가 그냥 만들지 않았어요. wr_file_count로 대부분 skip이 되고
몇개 안되는 것은 보여준다고 해서 크게 문제가 될 것 같지는 않아서요 ^^
          
Rino 2008-05
아 아꿉...

벌써 해보셨다니..ㅋㅋ 한목 거들기가 만만치 않네요..ㅋㅋ

또 딴거 열팀히 디져 봐야 겠네요..ㅋㅋ
Rino 2008-05
깔끔한 파일 변환을 위하여..^^

================ upgrade_turning.php ================

<?
$sub_menu = "100600";
include_once("./_common.php");

check_demo();

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

$g4[title] = "업그레이드";
include_once("./admin.head.php");

$sql = " select bo_table from $g4[board_table] ";
$result = sql_query($sql);

while ($row = sql_fetch_array($result))
{   
    $tmp_write_table = $g4[write_prefix] . $row[bo_table];
//데이터 백업
$sql_bak = " select * from $tmp_write_table order by wr_id ";
$result_bak = sql_query($sql_bak);
$b = 0;
while ($bak = sql_fetch_array($result_bak))
{
$wr_id[$b] = $bak[wr_id];
$wr_num[$b] = $bak[wr_num];
$wr_reply[$b] = $bak[wr_reply];
$wr_parent[$b] = $bak[wr_parent];
$wr_is_comment[$b] = $bak[wr_is_comment];
$wr_comment[$b] = $bak[wr_comment];
$wr_comment_reply[$b] = $bak[wr_comment_reply];
$ca_name[$b] = $bak[ca_name];
$wr_option[$b] = $bak[wr_option];
$wr_subject[$b] = $bak[wr_subject];
$wr_content[$b] = $bak[wr_content];
$wr_link1[$b] = $bak[wr_link1];
$wr_link2[$b] = $bak[wr_link2];
$wr_link1_hit[$b] = $bak[wr_link1_hit];
$wr_link2_hit[$b] = $bak[wr_link2_hit];
$wr_trackback[$b] = $bak[wr_trackback];
$wr_hit[$b] = $bak[wr_hit];
$wr_good[$b] = $bak[wr_good];
$wr_nogood[$b] = $bak[wr_nogood];
$mb_id[$b] = $bak[mb_id];
$wr_password[$b] = $bak[wr_password];
$wr_name[$b] = $bak[wr_name];
$wr_email[$b] = $bak[wr_email];
$wr_homepage[$b] = $bak[wr_homepage];
$wr_datetime[$b] = $bak[wr_datetime];
$wr_last[$b] = $bak[wr_last];
$wr_ip[$b] = $bak[wr_ip];
$wr_1[$b] = $bak[wr_1];
$wr_2[$b] = $bak[wr_2];
$wr_3[$b] = $bak[wr_3];
$wr_4[$b] = $bak[wr_4];
$wr_5[$b] = $bak[wr_5];
$wr_6[$b] = $bak[wr_6];
$wr_7[$b] = $bak[wr_7];
$wr_8[$b] = $bak[wr_8];
$wr_9[$b] = $bak[wr_9];
$wr_10[$b] = $bak[wr_10];

$b++;
}

//파일카운트
$sql_file = " select wr_id, count(wr_id) as cnt from $g4[board_file_table] where bo_table = '$row[bo_table]' group by wr_id ";
    $result_file = sql_query($sql_file);
$f = 0;
    while ($file = sql_fetch_array($result_file))
    {
$fi[$f][wr_id] = $file[wr_id];
$fi[$f][cnt] = $file[cnt];
//echo $f."번 파일아이디 : ".$fi[$f][wr_id].", 파일카운트 : <font size=10 color=red>".$fi[$f][cnt]."</font><br>";
        $f++;
    }
$file_count = $f;
//기존 테이블 삭제(데이터 포함)
$sql_drop = " DROP TABLE IF EXISTS `$tmp_write_table` ";
    sql_query($sql_drop, false);
echo $tmp_write_table . "Table을 삭제하고 재구성합니다.<br>";

//테이블제구성
    $sql_create = " CREATE TABLE `$tmp_write_table` (
  `wr_id` int(11) NOT NULL auto_increment,
  `wr_num` int(11) NOT NULL default '0',
  `wr_reply` varchar(10) NOT NULL default '',
  `wr_parent` int(11) NOT NULL default '0',
  `wr_is_comment` tinyint(4) NOT NULL default '0',
  `wr_comment` int(11) NOT NULL default '0',
  `wr_comment_reply` varchar(5) NOT NULL default '',
  `ca_name` varchar(255) NOT NULL default '',
  `wr_option` set('html1','html2','secret','mail') NOT NULL default '',
  `wr_subject` varchar(255) NOT NULL default '',
  `wr_content` text NOT NULL,
  `wr_file_count` TINYINT( 4 ) UNSIGNED NOT NULL,
  `wr_link1` text NOT NULL,
  `wr_link2` text NOT NULL,
  `wr_link1_hit` int(11) NOT NULL default '0',
  `wr_link2_hit` int(11) NOT NULL default '0',
  `wr_trackback` varchar(255) NOT NULL default '',
  `wr_hit` int(11) NOT NULL default '0',
  `wr_good` int(11) NOT NULL default '0',
  `wr_nogood` int(11) NOT NULL default '0',
  `mb_id` varchar(255) NOT NULL default '',
  `wr_password` varchar(255) NOT NULL default '',
  `wr_name` varchar(255) NOT NULL default '',
  `wr_email` varchar(255) NOT NULL default '',
  `wr_homepage` varchar(255) NOT NULL default '',
  `wr_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
  `wr_last` varchar(19) NOT NULL default '',
  `wr_ip` varchar(255) NOT NULL default '',
  `wr_1` varchar(255) NOT NULL default '',
  `wr_2` varchar(255) NOT NULL default '',
  `wr_3` varchar(255) NOT NULL default '',
  `wr_4` varchar(255) NOT NULL default '',
  `wr_5` varchar(255) NOT NULL default '',
  `wr_6` varchar(255) NOT NULL default '',
  `wr_7` varchar(255) NOT NULL default '',
  `wr_8` varchar(255) NOT NULL default '',
  `wr_9` varchar(255) NOT NULL default '',
  `wr_10` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`wr_id`),
  KEY `wr_num_reply_parent` (`wr_num`,`wr_reply`,`wr_parent`),
  KEY `wr_is_comment` (`wr_is_comment`,`wr_id`)
) ";
    sql_query($sql_create, false);
    echo $tmp_write_table . "에 wr_file_count 필드가 추가되어 재생성되었습니다.<br>".$tmp_write_table."Table의 데이터를 변환합니다.<br>";
//echo "파일카운트 : ".$file_count."<br>";
//데이터 제구성
$sql_insert = "INSERT INTO `$tmp_write_table` VALUES ";
for($c=0; $c<$b; $c++)
{
//파일찾기
$wr_file_count = "";
for($fc=0; $fc<$file_count; $fc++)
{
//echo $fc." 파일아이디 : ".$fi[$fc][wr_id]." / 데이터아이디 : ".$wr_id[$c]." / 파일카운트 : ".$fi[$fc][cnt]."<br>";
if($wr_id[$c] == $fi[$fc][wr_id]){
$wr_file_count = $fi[$fc][cnt];
break;
}
}
//echo "<font size=10 color=blue>wr_id : ".$wr_id[$c]." / </font><font size=10 color=red>번호등록 : ".$wr_file_count."</font><br>";
//echo "<br><br>";
//백업데이터 작성
if(!$c){
$sql_insert = $sql_insert."(";
}else{
$sql_insert = $sql_insert.",(";
}
$sql_insert = $sql_insert.addslashes($wr_id[$c]).",'".addslashes($wr_num[$c])."','".addslashes($wr_reply[$c])."','".addslashes($wr_parent[$c])."','".addslashes($wr_is_comment[$c])."','".addslashes($wr_comment[$c])."','".addslashes($wr_comment_reply[$c])."','".addslashes($ca_name[$c])."','".addslashes($wr_option[$c])."','".addslashes($wr_subject[$c])."','".addslashes($wr_content[$c])."','".addslashes($wr_file_count)."','".addslashes($wr_link1[$c])."','".addslashes($wr_link2[$c])."','".addslashes($wr_link1_hit[$c])."','".addslashes($wr_link2_hit[$c])."','".addslashes($wr_trackback[$c])."','".addslashes($wr_hit[$c])."','".addslashes($wr_good[$c])."','".addslashes($wr_nogood[$c])."','".addslashes($mb_id[$c])."','".addslashes($wr_password[$c])."','".addslashes($wr_name[$c])."','".addslashes($wr_email[$c])."','".addslashes($wr_homepage[$c])."','".addslashes($wr_datetime[$c])."','".addslashes($wr_last[$c])."','".addslashes($wr_ip[$c])."','".addslashes($wr_1[$c])."','".addslashes($wr_2[$c])."','".addslashes($wr_3[$c])."','".addslashes($wr_4[$c])."','".addslashes($wr_5[$c])."','".addslashes($wr_6[$c])."','".addslashes($wr_7[$c])."','".addslashes($wr_8[$c])."','".addslashes($wr_9[$c])."','".addslashes($wr_10[$c])."')";
}
if($c){
//echo htmlspecialchars($sql_insert)."<br><br><br>";
sql_query($sql_insert);
$er1 = mysql_errno();
$er2 = mysql_error();
if($er1){
echo $er1."<br>".$er2."<br>";
}
}
echo $tmp_write_table."테이블에 백업한 데이터를 작성하였습니다.<br><br>";
}

echo "<br>wr_file_count file 추가 UPGRADE 완료.";

include_once("./admin.tail.php");
?>

================ upgrade_turning.php ================
     
불당 2008-05
^_____________^...
Rino 2008-05
move_update.php 파일  55번라인에

wr_file_count    = '".$row2[wr_file_count]."',

요거 추가 해주세요.

추가하니 파일 복사시 파일 복사 까지 되네요..^^
     
불당 2008-05
^________________________^...
Rino 2008-05
헐..ㅠ.ㅠ 실수 입니다.

파일 복사 안되네요..ㅠ.ㅠ
     
불당 2008-05
^_________^...a... 테스트 해보니까 잘 되는데요???
곰순이푸 2008-05
ㅎㅎ 파일 복사 안되는거 아직도 안고치셨네용~
제가 안된다고 제보한게 20일전인데용~
분발하세요~
     
불당 2008-05
ㅎㅎ...그러게요. 한번도 관리자에서 복사를 안해서... 수정할 필요를 못 느껴서요.
이번에 cheditor를 코멘트에 넣는거 끝내구, 자료출처 넣는것도 끝내구 ... 이후에나 해야죠.
          
불당 2008-05
Rino님이 알려주신대로 수정하니까 잘 되네요^^


제목Page 1/4
2013-05   14637   불당
2010-04   14104   불당
2016-08   47658   불당
2008-09   7674   불당
2013-01   15895   불당
2013-06   13073   불당
2008-04   7596   불당
2008-04   8246   불당
2008-04   7179   불당
2008-04   7578   불당
2008-04   5820   불당
2008-04   7931   불당
2008-04   7224   불당
2008-04   7939   불당
2008-04   15238   불당
2008-04   8674   불당
2008-04   6014   불당
2008-04   6332   불당
2008-04   8012   불당
2008-04   8067   불당
2008-04   7220   불당
2008-04   6911   불당
2008-05   5971   불당