트랙백 기능에서 코드 에러좀 봐 주세요. > 그누4 질문답변

그누4 질문답변

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

트랙백 기능에서 코드 에러좀 봐 주세요. 정보

트랙백 기능에서 코드 에러좀 봐 주세요.

본문

제 홈페이지에다 트랙백 기능을 보강했는데 그것은 내가 다른 글에 트랙백을 걸었을 때 상대글의 url이 댓글 처럼 붙게 하는 기능을 만들었습니다. 이건 제대로 되는데 마지막 수정 작업으로 $wr_trackback(여기서는 상대글 tb_url임)을 상대글 url로 변경하는 PHP 구분때문에 프로그램이 실행하다 멈추고 있음 (그 걸 주석 처리하면 제대로 작동) 어느 부분이 잘못되어 있는지 에러 좀 봐 주세요.

에러는 아래를 봐 주세요.
-----------------------------------------------------
write_update.php  //이부분은 에러가 없음

// 트랙백 주소가 있다면 (내가 딴 놈글에 트랙백을 걸 때, 상대방에게 내글 정보 핑 보내기)
if (($w != "u" && $wr_trackback) || ($w=="u" && $wr_trackback && $re_trackback))
{
    $trackback_url = "$g4[url]/$g4[bbs]/tb.php/$bo_table/$wr_id";
    $msg = "";
    $msg = send_trackback($wr_trackback, $trackback_url, $wr_subject, $board[bo_subject], $_POST[wr_content]);
    if ($msg) {
        echo "<meta http-equiv='content-type' content='text/html; charset={$g4['charset']}'>\n";
        echo "<script type='text/javascript'>alert('$msg $wr_trackback');</script>";
}
// 사용자 코드 실행
/*내가 트랙백을 건 것을 댓글 처럼 내 글 아래에 붙이는 방법을 처리하는 화일(활용팁에서 가져옴)
문제는 상대글이 같은서 버 이외는 글 내용을 가져 올 수 없어 *content는 "링크만 표시키로" */
@include_once ("$board_skin_path/write_update.skin.php");
}
----------------------------------

write_update.skin.php //여기 중간에 문제 구문이 있음.

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

// 자신만의 코드를 넣어주세요.

//트랙백 기능 추가

//내가 딴놈 글에 트랙백을 걸은 후 상대 링크를 트랙백 리스트에 포함 시키기 위한 처리
// 마치 그 놈이 내글에다 다시 트랙백을 걸어 온 것처럼 강제로 만드는 것임
// 이리좀 자세히 주석을 달아 주셨음 좋았을텐데, 한참 헤멨음(이게 보내는 건지 받는 건지를)

if ($wr_trackback) {

    $board = sql_fetch(" select bo_subject, bo_use_trackback from $g4[board_table]
                  where bo_table = '$bo_table' ");
    if (!$board[bo_use_trackback])
        $msg = "트랙백 사용이 금지된 게시판입니다.";

    if (!$msg) {

        $next_num = get_next_num($write_table);

        $sql = " select max(wr_comment) as max_comment from $g4[write_prefix]$bo_table
                  where wr_parent = '$wr_id' and wr_is_comment = 1 ";
        $row = sql_fetch($sql);
        $row[max_comment] += 1;
$arr2 = explode("/", $trackback_url); //내글의 url,
                        //원본에는 상대글의 tb_url인 $wr_trackback이었음, 이건 말이 안되어 고침
                        //상대글이 같은 서버내 다른 글이 라면 말이되지만, 끼리끼리만 되란법은 없죠
$bo2 = $arr2[5];
$wr2 = $arr2[6];
   
        $sql4 = " select * from $g4[write_prefix]{$bo2}
                  where wr_parent = '$wr2' and wr_is_comment = 0 ";
        $row4 = sql_fetch($sql4);

        //여기부터 문제된 곳 (자세히 봐 주세요. 어디가 틀린 곳인지요)
        // 네이버/다음 블로그 트랙백을 링크 url로 변경
        if (preg_match('/tb\//', $wr_trackback)) {
                  $wr_trackback = preg_replace('/tb\//', "", $wr_trackback);

        // 그누보드 트랙백을 뒤 token을 제거해서 링크url로 변경
        } elseif ( preg_match('/bbs\/tb\.php/', $wr_trackback)) {
$wr_trackback = preg_replace('/\/[^\/]*$/', "", $wr_trackback);
}
      echo $wr_trackback; //요부분을 없이해도 안 되네요.
      //프로그램이 여기서 스톱. 이후 $sql이 실행 안됨. 이걸 제거하면 통과.

      $sql = " insert into $g4[write_prefix]$bo_table
                    set wr_num = '$next_num',
                        wr_parent = '$wr_id',
                        wr_is_comment = '1',
                        wr_comment = '$row[max_comment]',
                        wr_content = '\"내가 건 트랙백 :{$wr_trackback}\"',
                        wr_trackback = '$wr_trackback',
                        mb_id = '$wr[mb_id]',
                        wr_password = '$wr[wr_password]',
                        wr_datetime = '$g4[time_ymdhis]'  ;
        $result = sql_query($sql, FALSE);
        if ($result) {
            $comment_id = mysql_insert_id();
            sql_query(" update $g4[write_prefix]$bo_table set wr_comment = wr_comment + 1
                                  where wr_id = '$wr_id' ", FALSE);
            sql_query(" insert into $g4[board_new_table]
                            ( bo_table, wr_id, wr_parent, bn_datetime )
                            values ( '$bo_table', '$comment_id', '$wr_id', '$g4[time_ymdhis]' ) ");
            sql_query(" update $g4[board_table]
                    set bo_count_comment = bo_count_comment + 1
                      where bo_table = '$bo_table' ", FALSE);
        } else   
            $msg = "$g4[write_prefix]$bo_table TABLE INSERT 오류";
    }
}
?>
  • 복사

댓글 전체

제가 드린 코드네요.. ^^;
그때도 테스트 하고 드렸고, 방금전에도 다시 해당 코드만 떼어다 (그누보드 트랙백 주소와 네이버 블로그 트랙백 주소로) 테스트 해봤는데 처리되었습니다. ^^;

왜 안될까요???
예 맞습니다.
코드상에는 전혀 이상이 없는데 이 코드만 중간에 끼면 한참 웨이팅에 걸리네요.
원래 전진님의 코드 원본으로 view페이지에 붙였을 때는 제대로 되더니만 이것을 view_comment.skin.php에 붙이고 코드를 약간 손봤더니만 안되더군요.
이럴때가 가장 황당한데 아마도 db접속과 관련된 다른 어디와 충돌이 나는 모양입니다.
도움이 안될때는, 채택안하셔도 됩니다. ^^;

근데 아무리봐도, 에러가 나신다는 부분은 $wr_trackback 변수 하나만 처리하는, 아주 간단한 코드블럭이라..

혹시 에러내용을 알 수 있을까요?
구체적인 에러 내용이 안뜬다면, 좀 구식이기는 하지만, 중간중간 확인할 수 있는 echo를 넣어서 어디에서 멈추는 지 알아볼 수 있다면, 도움을 더 드릴 수 있을것 같은데요.. ^^
원인을 찾았습니다.
말씀드리기 창피한 이야기인데요. 화일 update 실패였군요.
localhost내에 있는 화일을 고치고는 이것을 main server로 ftp 전송을 할 때 전송이 제대로 안되었군요. 이럴 때가 가끔 있음. 
초보들은 이처럼 문제 원인을 엉뚱한데서 짚고 질문을 하니 답변자들께서도 난감할 경우가 생기는데 이번이 그런거네요.
그렇지만 바로 이런 과정을 통해서 문제의 근본을 찾게 되니까 큰 도움이 되었습니다.
(코드 에러가 아니라면 그렇다면 어디가 문제지?하고 시야를 넓게 할 수 있으니....)
아.. 다행입니다.
네, 가끔 전혀 예상치 못한곳에서 에러가 날 수 있습니다.
특히 로컬/서버 식으로 별도의 버전을 사용하는 경우에는 수정된 화일의 업로드/업데이트 여부도 헷갈릴 수 있죠.. ^^
잘 되신다니 다행입니다. ^^
감사합니다.

어설프지만 겨우 완성해서 이렇게 만들었습니다. 시간나면 봐 주시고 또 고언 부탁드립니다. http://www.biz-nara.com/bbs/tb.php/nanum/217
© SIRSOFT
현재 페이지 제일 처음으로