PHP

소걸음 2009. 7. 24. 13:36
머리말: 이 게시물은 퍼가셔도 됩니다. 하지만 머리말과 작성자는 꼭 명시해주셨으면 합니다.
===================================================================================

트랙백 구현하기 - 4. PHP로 트랙백 핑 받기

Download #1에 풀소스가 첨부되어 있습니다.

보내는 부분은 완료되었으니 이제는 반대로 트랙백을 받는 부분을 알아보도록 하겠습니다. 보내는 것보다 훨씬 쉽습니다. 이번에도 개요를 보도록 하지요.

1. POST로 url,title,blog_name,excerpt변수를 GET이나 POST로 해당 글에 관련된 정보(게시판 ID나 글번호)를 받는다.
2. 위의 변수들이 모두 존재하는지 검사하고, 그렇지 않으면 에러 출력 후 작동을 끝낸다.
3. 해당 변수가 모두 정상적인지를 확인하고 그렇지 않으면 에러 출력 후 작동을 끝낸다.
4. 위 과정을 모두 통과했을 경우 DB에 트랙백의 내용을 저장하고 에러 없음을 리턴한다.

이제 풀소스를 보죠.


그림이 찌그러져 보일 경우에는 클릭해서 새창으로 띄워 보세요.

이번에는 함수화가 아니라 단일 파일로 회신할 것입니다. 보낼 때와는 다르게 6개의 변수를 받아야 하는데, 트랙백의 기본인 $url,$title,$blog_name,$excerpt와 트랙백을 받는 글의 정보를 나타내는 변수, 이렇게 최소한 5개의 변수가 필요합니다. 저의 경우는 글의 정보를 나타내는 변수로 $id와 $no 두개를 사용했습니다.

여기서 트랙백을 받을 때 달랑 트랙백을 받는 파일만을 만들어두면 안되겠지요. 트랙백을 보낼 수 있는 주소를 알려주어야 합니다. 1편의 그림 2를 다시 보겠습니다.

그림 2: 트랙백 과정 - 1

이처럼 글 하단에 적절한 주소를 알려주어야 합니다. 여기에서 글의 정보를 나타내는 변수를 알려주는 것입니다. 보시다시피 GET방식으로 변수를 나열하고 있습니다. 이 그림에서는 $bid와 $id가 그것이 될 것입니다. 이 주소로 트랙백을 보내면 $url,$title,$blog_name,$excerpt는 POST로, $bid,$id는 GET으로 전달되어 오겠지요.

응답을 회신할 때의 규칙도 다시금 회상해 봅시다. 2편의 내용을 다시 끄집어내 보겠습니다.

에러가 없을 때에는

<?xml version="1.0" encoding="euc-kr(혹은 iso-8859-1)"?>
<response>
    <error>0</error>
</response>

의 내용을, 에러가 있을 시에는

<?xml version="1.0" encoding="euc-kr(혹은 iso-8859-1)"?>
<response>
    <error>1</error>
    <message>에러의 내용</message>
</response>

를 출력해줍니다.

위 형식에 맞게 회신해 주어야겠죠.

응답 후 자료를 DB에 넣어야겠지요. 여기서 에러가 나면 또 이것을 반환해야 합니다. DB에 정상적으로 자료를 입력했다 해도 끝이 아닙니다. 사용자가 해당 글을 읽을 때 코멘트가 달린 것처럼 어느 곳에서 트랙백이 왔는지 알 수 있도록 내용을 출력해주어야 합니다.

글로 써보니 복잡하기 이를 데 없군요. 준비는 여기까지로 그만두고, 소스를 뜯어보며 자세한 방법을 알아봅시다.


header("Content-Type: text/xml");
echo("<?xml version=\"1.0\" encoding=\"euc-kr\"?>\n<response>\n");

당연히 XML이라는 사실을 알려주어야겠지요. 회신 규칙에 따라 <response>택까지 출력합니다.


if(!$id or !$no or !$_POST[url] or !$_POST[title] or !$_POST[blog_name] or !$_POST[excerpt]) {
    $msg = "";

위에서 말했듯이 저는 $url,$title,$blog_name,$excerpt와 글의 정보인 $id,$no를 전달받을 것입니다. $url,$title,$blog_name,$excerpt는 POST방식으로 전달되고 $id,$no는 GET으로 전달됩니다(단 $id와 $no는 어떤 방식이라고 규정하지 않고 그냥 받아올 것입니다). 그러므로 저 6개의 변수가 모두 존재해야 합니다. 하나라도 빠져 있는 경우에 에러를 내야겠죠.

    if(!$id) $msg .= " id";
    if(!$no) $msg .= " no";
    if(!$_POST[url]) $msg .= " url";
    if(!$_POST[title]) $msg .= " title";
    if(!$_POST[blog_name]) $msg .= " blog_name";
    if(!$_POST[excerpt]) $msg .= " excerpt";

부족한 6개의 변수 중 정확이 어느 것이 빠졌는지를 검사해 $msg에 넣습니다. 사실 이럴 필요 없이 에러문에 그냥 어떤 "변수 부족"이라고만 써도 됩니다만 친절하게(?) 빠진 변수를 설명해주기로 했습니다.

    die("<error>1</error>\n<message>Missing Parameter(s) :".$msg."</message>\n</response>");
}

무엇이 빠졌는지를 출력하며 PHP 실행을 끝내버립니다. 여기서 변수 부족 에러는 완전히 걸러집니다.

if($id != "정상적인 ID") die("<error>1</error>\n<message>Wrong Parameter : id</message>\n</response>");
if($no != "정상적인 글번호") die("<error>1</error>\n<message>Wrong Parameter : no</message>\n</response>");

이제 변수가 올바른지를 검사해야 합니다. 글의 정보와 관련된 2개의 변수만 검사하면 되겠지요. 이 부분은 각자 자신에 맞게 고쳐주어야 합니다. 전체적인 맥락은 해당 포스트가 존재하는지를 검사해서 잘못되었을 경우 에러를 낸다는 것입니다. 제로보드를 예로 들어 볼까요.

$ti = @mysql_fetch_row(mysql_query("select count(*) from zetyx_admin_table where id = '$id'"));
if(!$ti[0]) die("생략");
$tn = @mysql_fetch_row(mysql_query("select count(*) from zetyx_board_$id where no = '$no'"));
if(!$tn[0]) die("생략");

거듭 말씀드리지만 자신에 맞게 고치셔야 합니다.

mysql_query("insert into 트랙백테이블 values ('','$id','$no','$url','$title','$blog_name','$excerpt','UNIX_TIMESTAMP()','')")
                or die("<error>1</error>\n<message>DB Query error</message>\n</response>");

위 과정을 모두 거친 완벽한 트랙백 핑에 한해서 DB에 해당 내용을 삽입합니다. 이 역시 자신에 맞게 고쳐주시면 됩니다. 역시 핵심은 DB에 해당하는 모든 자료를 넣되, 자료를 넣는데 실패했을 경우 에러와 함께 프로그램을 종료시키는 것입니다.

echo("<error>0</error>\n</response>");

이제 트랙백 핑의 긴 여정도 끝입니다. 최종적으로 무사통과라는 회신을 돌려줍니다.

핑의 일은 끝입니다만 앞에서 말씀드렸듯이 해당하는 글 하단에 트랙백 정보를 알려주어야 합니다. 이건 이 시리즈에서는 생략하겠습니다. 단순히 자료를 뽑아오는 것 뿐이니 충분히 쉽게 할 수 있으리라 생각됩니다.

지금까지 비교적 최신 기술인 트랙백을 보내고 받는 과정을 알아봤습니다. 게시판이나 블로그에 응용해 보세요. 그리고 성공하신 분들은 http://micsland.com/mblog/tb.php?id=test&no=3 에 트랙백을 한번 보내주시면 감사하겠습니다 :D

 

 

 

모니터 그래픽 카드 다년간의 노하우 와 최고의 장비로 성심 성의것
수리를 약속드림니다 무조건 교환이 아닌 직접 수리를 약속드리며
어려운경기에 같이 도와가면서 살수 있도록 노력 하구 있읍니다
카페 방문후 전화 주시면 아는 선에서는 성심 성의것 도와드리것을
약속드림니다 cafe.daum.net/282848 방문후 전화 주세요
리페어 의 모든것을 하구있읍니다 017-650-0360 임니다
언제든 지우셔도 됨니다 죄송함니다
다녀갑니다..경인년한해두행복하세요^^
좋은글 잘 보고 갑니다~~ 좋은 하루 되세요~^^
창업 영업 아르바이트 에 관심있으시면 들려주세요~
좋은 곳 방문하여 흔적남기고 갑니다. ^^
좋은글 잘 보고 갑니다~~ 좋은 하루 되세요~^^
올한해 좋은 일만 생기세요 ~~
카페 가입해주시면 많이 도움이 될거같읍니다 가입 해주심 감사하겠습니다