웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
트랙백 구현하기 - 4. PHP로 트랙백 핑 받기
2004.07.18 18:53
머리말: 이 게시물은 퍼가셔도 됩니다. 하지만 머리말과 작성자는 꼭 명시해주셨으면 합니다.
===================================================================================
트랙백 구현하기 - 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
===================================================================================
트랙백 구현하기 - 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
댓글 0
제목 | 글쓴이 | 날짜 |
---|---|---|
rand함수와 mt_rand함수의 비교 [6] | 심심타 | 2004.07.30 |
트랙백 구현하기 - 4. PHP로 트랙백 핑 받기 | TheMics | 2004.07.18 |
트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기 [4] | TheMics | 2004.07.18 |
히어닥 문법 활용 [14] | ☺심심 | 2004.07.13 |
++와 +=1 의 속도차이 [7] | 플로렐라 | 2004.07.12 |
<와 <=의 속도차이? [23] | 플로렐라 | 2004.07.07 |
서버가 느려졌을경우... [20] | 신상우 | 2004.06.28 |
파일업로드시 파일명 중복되지 않게 저장하기.. [8] | 페리 | 2004.06.28 |
페이지에 암호를 걸자..=_= [27] | ☺심심 | 2004.06.25 |
아이피 접근을 막고 메세지 출력하기.. [11] | ☺심심 | 2004.06.24 |
오늘의 명언을 출력해주는 함수 [10] | 김재경 | 2004.06.15 |
3. if문 [13] | 티다 | 2004.06.05 |
응용편 - BMI 측정 테스트 소스를 만들어보자 [5] | 티다 | 2004.06.04 |
게시판내용에 코멘트를 달자!! -마지막- [2] | 이혁 | 2004.06.03 |
게시판내용에 코멘트를 달자!! -2- [1] | 헉스 | 2004.06.02 |
게시판내용에 코멘트를 달자!! [3] | 헉스 | 2004.06.02 |
2. array [5] | 티다 | 2004.06.02 |
1. 연산자 [2] | 티다 | 2004.06.02 |
주식정보출력코드 [2] | 김재경 | 2004.06.01 |
윈도우계정에서 현재 남은 용량과 DB 용량 알기 [6] | 지으니 | 2004.05.31 |