트랙백 기능을 네이버 블로그 처럼 하려면? > 그누4 질문답변

그누4 질문답변

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

트랙백 기능을 네이버 블로그 처럼 하려면? 정보

트랙백 기능을 네이버 블로그 처럼 하려면?

첨부파일

tb.php (6.8K) 1회 다운로드 2012-05-24 01:13:59
trackback.lib.php (2.4K) 3회 다운로드 2012-05-24 01:13:59

본문

저는 네이버 블로그 계정(pnk5)을 하나 가지고 있는데 그곳에서 사용하는 트랙백 기능과 그누보드를 기반으로 만든 제 홈페이지의 트랙백 기능이 차이가 나는 듯합니다.

네이버에서는 제가 글(B)을 하나 작성한 후(즉 새 글이 아닌 수정모드에서) 네이버에 있는 다른 글(A)로 트랙백(엮인글)을 걸으면 다른 글(A)에 엮인글이 추가 되면서 제 글(B)의 제목/내용 일부가 A의 본문 아래에 잘 나타납니다. 그리고 제글(B)에도 다른 글 (A)의 제목/내용 일부가 본문 아래에 표시됩니다. 또한 제 글 B에 다른 사람 글 E, F, G와 트랙백을 걸면 마찬가지로 A처럼 모두가 제대로 됩니다.

그런데 제 홈페이지(www.biz-nara.com)에서는  문제는
문제 1.
(수정 모드가 아닌) 새 글(C)을 만들면서 네이버 다른 글(A)의 트랙백 주소를 복사해와 붙여 넣으면 글 A에는 제 글(C)의 제목/내용 일부가 아래에 붙으며 트랙백이 걸린게 확인되지만 제 글C에는 아무것도 나타나지 않는 점입니다. 대신 다른사람 글, 가령 A, E,F,G 에서 제 글(C)로 트랙백을 걸어 주면 C글 본문 아래에 트랙백 건 글의 제목/내용 일부가 나타납니다.
결국 트랙백을 건 다른 글의 정보가 댓글 처럼 본문 아래에 뿌려 주는 PHP 구문을 추가해야 할 것 같은데 어디에서 어떻게해야 할 까요?

문제 2
글 C을 만든 후에 수정 모드에서 글 A의 트랙백 주소를 붙이고 ping을 체크해 전송하면 "올바른 url이 아닙니다"라는 에러 메세지만 나오고 트랙백이 안걸립니다. 다른 사람 글 E, F, G에도 마찬가지
그 이유를 모르겠는데요, 그래서 해당 화일들을 첨부해 올립니다. (같은 주소 복사를 여러번 반복해서 제대로 안 먹히는 것인가?)

위 현상을 보고 저는 네이버 블로그 끼리만 트랙백이 제대로 되는 것이고 그누보드의 제 홈페이지는 새글을 쓰면서 최초의 트랙백 오직 하나에만 가능한 걸로 오해했던 것입니다. (정말로 그런거라면 트랙백을 아예 없애는게 낫겠죠.)
  • 복사

댓글 전체

어쩐지 트랙백관련 걸래도사님과 저의 대화가 계속 이어지는 듯한 느낌이 드네요.. ^^

우선 문제 1은, 지난번 글의 댓글에 기본적인 방법을 남겼었습니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=226907

문제는 그누보드의 트랙백 주소는 맨 마지막의 트랙백 유니크 키만 삭제하면, 그 자체만으로도 원글에 접속을 할 수 있지만,
다른 트랙백 주소들은, 그 나름대로의 주소 포멧이 있어서 간단하지는 않습니다.
예를 네이버는 http://blog.naver.com/tb/네이버아이디/글아이디 형식인데
실제 글 주소는 http://blog.naver.com/네이버아이디/글아이디  입니다.
즉, 화면에 트랙백을 보낸 원글의 주소를 만들어 뿌려줄때, 위와같은 처리를 해주어야 합니다.

간단히 그누보드와 네이버블로그만 처리하자면,

<? if ($view['wr_trackback']) {
    if (preg_match('/blog\.naver\.com\/tb/', $view['wr_trackback'])) { // 네이버 블로그 트랙백
        $trackback_url = preg_replace('/tb\//', "", $view['wr_trackback']);
    }elseif ( preg_match('/bbs\/tb\.php/', $view['wr_trackback'])) { // 그누보드 트랙백
        $trackback_url = preg_replace('/\/[^\/]*$/', "", $view['wr_trackback']);
    }
    echo "<div>트랙백 보낸주소: <a href='$trackback_url'>$trackback_url</a></div>"; }
?>
정도면 되지 않을까 합니다.

####

문제 2는, 저는 네이버로 트랙백 보내는 것은 잘 작동하는데요? ^^;
네이버 트랙백 주소가 맞는지 한번 더 확인해 보시겠어요?

하지만 더 큰 문제는, 글 수정시 수정된 트랙백은, 글에 저장이 안된다는 점입니다. -_-;

bbs/write_update.php의 412 줄쯤에

    $trackback_set = "";
    if ($wr_trackback && $re_trackback)
    $trackback_set = "wr_trackback = '$wr_trackback',";

를 넣으시고, 그 아래 $sql 만드는 부분 중간쯤에 (  mb_id = '$mb_id', 윗줄 쯤)

                    $trackback_set

를 추가하면, 수정된 트랙백 주소로 변경됩니다. 음.. 원칙적으로 하자면, 글 작성시 보낸 트랙백주소도 같이 저장해야 되는데.. 이는 이전 글의 복수 트랙백과 같이 함께 구현해야 되지 않을까 합니다.

첨부하신 화일은 열어보지 않았는데, 개인적으로 수정하신 화일들인가요? 아니라면 위 와 같은 방식으로 하시면 될것 같습니다. 테스트 해봤습니다 .^^;

네이버처럼 보낸 쪽이나 받은쪽 양쪽에 자취를 남기는 것은, 사실 일반적이지 않습니다.
네이버는.. 굉장히 닫힌 시스템입니다.  자체적으로, 표준을 변경해서 만든 서비스도 많고요..
반면에 자기들끼리는 잘 연동됩니다. 장단점이 있죠.
번번이 신세를 많이 집니다.
수정시 write_update.php 화일에 $wr_trackback_set를 추가해야 한다는 지적에 감사합니다.
저도 수정 후 wr_trackback에 상대 url이 저장이 안되는게 이상했습니다.
그런데 그리 수정하고 나니 저장이 안되고 무한 루프에 빠지더니만 지금은 서버 db 접속에도 이상이 생긴 듯합니다.  이 문제는 서버 디비 부터, tb.php, tb_token.php 등 근본적인 것부터 다시 점검해야 할 듯하네요. 혹시 token하고 상관이 있는 건 아닐가요? tb.php에 보니 2회 이상 trackback 방지를 위해 ....뭐 이런게 있던데 이것이 방해를 하는 건 아닌지 참.
암튼 감사드립니다.
저도 도움드리면서 배우고 있습니다. ^^

음.. 저는 문제없이 작동하는데 왜 일까요.. 괜히 저때문에 문제가 커지지 않았나 죄송합니다.

말씀하신 (트랙백) 토큰은, 외부 트랙백을 저장하는 쪽은 아니고,
그누보드게시물의 트랙백 주소를 만들때, 여러번 사용하지 못하도록 토큰을 붙히는 형태인것 같습니다.  즉, 다른 그누보드나, 다른 블로그 등에서, 본 사이트의 글쪽으로 트랙백을 보내는 경우에 사용하는 것입니다.
전혀 죄송하실 것 없습니다.
문제라는 것이 원래 생각지 못한 어떤 요인에서 생기는 것이므로 이런 과정을 거치면서 힌트를 얻기도 하고 또 핵심에 보다 가까이 접근하면서 결국은 스스로 해결점을 찾게 되기도 하니까요.

그리고 토큰관련 설명 감사드립니다. 이해가 좀 되었습니다.
첨부하신 화일을 열어서 최신버전과 확인해 봤습니다.
사용하시는 그누보드는, 작년 10월 4.34.15 이전 버전같아보입니다.
그것때문에 글수정시 트랙백 보내기가 에러가 나는지는 모르겠지만,
그 이후에 많은 보안패치가 이루어졌고, 특히 얼마전에 cheditor4 관련 심각한 문제가 발생 (cheditor 자체의 문제는 아니고, 코드가 손상된듯) 했기에, 꼭 최신버전으로 업데이트 하시길 권유드립니다. ^^
이런 경우가 가장 당황스럽고 황당해 집니다. 그 동안 제 문제가 마치 일반적인 상황인양 떠들었을 테고, 이를 바라 보는 사람들은 "도대체 이게 무슨 소린가"하는 경우였을 테니까요.

트랙백 관련건은 따로 손보지 않고 그누보드 것을 그대로 쓰고 있다고 생각하고 있지만 어디선가 나도 모르는 변동이 있을 수도 있으니 버전 update도 하나의 방법일 것 같습니다.
여하튼 트랙백에 대한 저의 오해(새글에서 한번만 가능?)를 푼 것으로도 큰 소득입니다.
아. 위 버전문제는, 걸래도사님이 대면하시는 그 문제의 원인이 아닐수도 있습니다. ^^;
그냥 올려놓으신 화일을 비교하면서, 사용하시는 버전을 알게 된것 뿐입니다.
음.. 새 버전의 트랙백 관련 화일에서 업뎃된 부분이, 외부에서 들어온 트랙백 핑을 처리하는 부분이므로, 아마도 현재 문제의 원인은 아닐것 같습니다.

그나저나 다른 문제를 더 일으킨것이 아닌지 걱정되네요. ^^;
최신버전을 설치하는 것도 하나의 방법일것 같습니다. ^^
우려 감사드립니다.
저 역시 무턱대고 신버전으로 엎어 씌우는데는 엄청나게 조심스러워 집니다.
그것으로 인하여 관련 화일들을 일일이 찾아 다시 수정을 해야한다면 아마 머리에 지진이 날 겁니다.  그런 일을 한 번 크게 겪은 터라 신중이 비교 검토해 가면 진행해 볼 생각입니다.
사용하시는 그누보드 버전을 아시면 (설치 루트에 있는 HISTORY 화일을 열어보시면 아실듯)
제가 만든 이 툴을 사용해서 변경된 화일들을 찾으실 수 있습니다. ^^;
http://gnuboard.org/pages/g4svn/
사용하시는 버전을 왼쪽에, 비교하실 최신 버전을 오른쪽 내림버튼으로 선택하시면,
특정 폴더에서 변경된 화일/폴더들이 표시됩니다.
/*실제 변경된 내용까지 보여주면 좋을텐데, 아직 그정도는.. ^^;*/
조금 시간을 들여서 수정해서, 두 버전간의 코드 변경내용을 보이게 했습니다.
드디어 답을 찾았습니다.
결국은 $re_trackback을 처리해 주는 화일로 여기서 다운 받아 설치한 write_update.skin.php내 코드 에러였군요. (line 22)

    $arr2 = explode("/", $trackback_url); //원본이 $wr_trackback인 것을 고침
    $bo2 = $arr2[5];
    $wr2 = $arr2[6];
보내는 내 주소가 되어야 하니까 $trackback_url 이 맞죠.
다행입니다.

한데, 위 방식은, 그누보드의 트랙백 포멧에만 맞는 경우일텐데요.. ^^;
네이버블로그 트랙백주소는 다른 형태인데다가, 그누보드인 경우라도
만일 그누보드가 서브폴더에 설치된 경우는, 5번째와 6번째가 아닌 6번째와 7번째 값을 써야해서요..
예: http://mydomain.con/gnuboard/bbs/tb.php/freeboard/99
      0  1          2                    3          4      5            6          7

그누보드 트랙백은, 마지막 토큰만 잘라버려도 원글로 접근이 가능합니다.
$trackback_url = preg_replace('/\/[^\/]*$/', "", $view['wr_trackback']);
© SIRSOFT
현재 페이지 제일 처음으로