PHP 와 Mysql 을 사용하여 Counter 나 Referral 로그를 만드는 방법임니다..
본문을 설명하기에 앞서..
Referral 이 뭔지 물으시는 분들이 많기에..
위키피디아에서 HTTP referer 을 찾으면 한줄로 찾을 수 있다.
When visiting a webpage, the referer or referring page is the URL of the previous webpage from which a link was followed.
즉, 웹페이지를 방문할때, 목적지 페이지를 어떤 페이지의 링크를 통해 들어갔다면 그 어떤 페이지의 URL 이 HTTP referer 또는 referring page 가 된다. 가령 http://blog.5hoon.com 을 접속할때 http://5hoon.com 에 있는 링크를 클릭해서 블로그로 들어왔다면 Referring page 는 http://5hoon.com 이 된다.
파폭을 사용한다면 마우스 오른쪽 클릭 -> 페이지 정보 로 Referring URL 을 볼수 있다.
이는 내 페이지가 어디에서 접속자가 많은지 파악할수 있는 중요한 자료이다.
우선 만들기를 위해서는 두 단계가 필요합니다.
MySql 에 테이블을 셋업 하는 단계로 나누어 집니다.
리퍼러 기록을 만드는 법부터 살펴 보겠습니다.
1. PHP 코드 만들기.
가장 중요한 부분은 DB 에 접속하는 것입니다.
<?php
mysql_connect("DB 주소","DB ID","DB pw");
mysql_select_db("DB 이름");
?>
원하는 부분만 사용하시면 됩니다.
테이블 에는 원하는 테이블 이름을 넣어 주셔야 합니다.
<?php
$tm = $_SERVER['REQUEST_TIME']; //시간을 기록
$ip = $_SERVER['REMOTE_ADDR']; //사용자 ip 기록
$page = $_SERVER['PHP_SELF']; //접속한 페이지를 기록
$ref = $_SERVER['HTTP_REFERER']; //리퍼러 기록
$agent = $_SERVER['HTTP_USER_AGENT']; //사용자의 브라우저 기록
$viewer_new_query = "INSERT INTO 테이블 (tm, ip, page, ref, agent) VALUES ('$tm', '$ip', '$page', '$ref', '$agent')";
$viewer_new_result = mysql_query($viewer_new_query);
?>
이렇게 코드를 만드시면 됩니다.
이때 리퍼러가 없거나 특정 리퍼러는 기록을 하고 싶지 않다면..
<?php
$tm = $_SERVER['REQUEST_TIME']; //시간을 기록
$ip = $_SERVER['REMOTE_ADDR']; //사용자 ip 기록
$page = $_SERVER['PHP_SELF']; //접속한 페이지를 기록
$ref = $_SERVER['HTTP_REFERER']; //리퍼러 기록
$agent = $_SERVER['HTTP_USER_AGENT']; //사용자의 브라우저 기록
$findme = 'blog.5hoon.com'; //있으면 무시할 주소
$pos = strpos($ref, $findme); //리퍼러에 있는지 확인
if ($pos === false && $ref != "") { //리퍼러에 주소가 없가나 공란이 아니면
$viewer_new_query = "INSERT INTO 테이블 (tm, ip, page, ref, agent) VALUES ('$tm', '$ip', '$page', '$ref', '$agent')";
$viewer_new_result = mysql_query($viewer_new_query);
}
?>
이렇게 하면 원하는 리퍼러만 DB에 기록할수 있습니다.
그리고 마지막으로 DB 접속 해제..
<?php
mysql_close();
?>
2. MySql 테이블 셋업.
SQL 퀴리만 실행 시킬면 간단히 됩니다.
phpMyAdmin 을 사용할 경우 DB name 을 클릭후 SQL 을 클릭하면 됩니다.
Run SQL query/queries on database ______ 이라고 뜨고 텍스트박스가 하나 뜨게 됩니다.
마찬가지로 테이블 에는 원하는 테이블 이름을 넣어 주셔야 합니다.
CREATE TABLE `테이블` (
`id` int(11) NOT NULL auto_increment,
`tm` varchar(15) NOT NULL default '',
`ip` varchar(15) NOT NULL default '',
`page` varchar(100) NOT NULL default '',
`ref` varchar(250) NOT NULL default '',
`agent` varchar(250) NOT NULL default '',
PRIMARY KEY (`id`)
)
이러면 끝 입니다 -0-;
리퍼러를 설정한 페이지를 접속후 DB 를 Browse 해보면 Entry 가 생긴것을 볼수 있습니다.
Counter 도 비슷한 방법으로 사용이 가능합니다.
1. PHP 코드 만들기.
가장 중요한 부분은 DB 에 접속하는 것입니다.
<?php
mysql_connect("DB 주소","DB ID","DB pw");
mysql_select_db("DB 이름");
?>
원하는 부분만 사용하시면 됩니다.
테이블 이름은 counter 로 되어있으나 필요에 따라 바꾸시면 됩니다.
<?php
$page = $_SERVER['PHP_SELF']; //페이지를 기록합니다.
//현재 페이지에 카운터가 있는지 확인
$viewer_check_query = "SELECT * FROM counter WHERE page = '$page'";
$viewer_check_result = mysql_query($viewer_check_query);
$viewer_check_numrows = mysql_num_rows($viewer_check_result);
//페이지가 없다면 새로운 entry 를 만듭니다.
if($viewer_check_numrows == 0){
mysql_query("INSERT INTO counter (page, count) VALUES('$page', '1')");
//페이지가 존재한다면 카운터를 증가합니다.
}else{
mysql_query("UPDATE counter SET count = count+1");
}
?>
이렇게 코드를 만드시면 됩니다.
그리고 마지막으로 DB 접속 해제..
<?php
mysql_close();
?>
2. MySql 테이블 셋업.
SQL 퀴리만 실행 시킬면 간단히 됩니다.
phpMyAdmin 을 사용할 경우 DB name 을 클릭후 SQL 을 클릭하면 됩니다.
Run SQL query/queries on database ______ 이라고 뜨고 텍스트박스가 하나 뜨게 됩니다.
마찬가지로 테이블 에는 원하는 테이블 이름을 넣어 주셔야 합니다.
CREATE TABLE `counter` (
`id` int(11) NOT NULL auto_increment,
`count` int(10) NOT NULL default '1',
PRIMARY KEY (`id`),
)
이러면 끝 입니다 -0-;
카운터를를 설정한 페이지를 접속후 DB 를 Browse 해보면 Entry 가 생긴것을 볼수 있습니다.
부록..
이렇게 DB 에 기록만 해놓고 빼서 볼수 없다면 아무런 소용이 없겠죠?
간단한 코드로 mysql 의 데이타를 다시 php 를 통해 브라우져에 뿌려 주는 방법입니다.
표를 만든다 하면..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>관리도구</title>
</head>
<body>
<table border="1px" cellpadding="0" cellspacing="0">
<!-- 테이블에 있는 항목들중 표기할 항목을 고릅니다. 리퍼러 기록이라 하면.. -->
<tr><td align="center">날 짜</td><td align="center">IP</td><td align="center">페이지</td><td align="center">리퍼러 주소</td></tr>
<?
<!-- DB 에 접속합니다 -->
mysql_connect("DB 주소","DB ID","DB pw");
mysql_select_db("DB 이름");
<!-- 최근 20개의 entry 를 뽑습니다 -->
$result=mysql_query("select * from 테이블 order by id desc limit 20");
while($data=mysql_fetch_array($result)){
echo "<tr><td>".date("m-d-y/G:i:s",$data[tm])."</td><td>.$data[ip].".</td><td>".
$data[ip]."</td><td>".$data[page]."</td><td>".$data[ref]."</td><td>".$data[agent]. </td></tr>;
}
echo "</table>";
mysql_close();
?>
</table>
</body>
</html>
를 하고 파일을 업로드 하면 됩니다.
반나절 삽질한 결과물 입니다...