Wednesday, November 01, 2006

네이버

네이버

전체목록 (1248) 목록열기 ▼



더보기" name="source_sumtext" type="hidden">
PHP와 Cookie를 이용한 카운터 만들기 | php 2006/02/28 15:00

http://blog.naver.com/hwangton/50002187329


PHP와 Cookie를 이용한 카운터 만들기

글쓴이 : 방준성

저작권자 이메일 : tongki70@hanmail.net

출처 : 최홍기

작성일 : 2002/04/25 11:40:26


글내용

PHP와 Cookie를 이용한 카운터 만들기(Update:99/09/18)

일반적으로 홈페이지 만들면서 카운터는 무료제공하는 것을 사용합니다.
그런데 이것들이 하나같이 비슷하고 크기도 고정된 이미지이므로 주로 전체구성과 잘 어울리지 못 하죠.
자! 이제 우리가 직접 카운터를 만들어 사용합시다.
생각만큼 어렵지 않아요, 아니죠 무지 쉽죠.


--------------------------------------------------------------------------------

제 1 단계 COOKIE란 무엇이냐?
카운터를 만들기 전에 먼저 쿠키란 놈에 대해 알아봅시다.
쿠키가 뭐냐? 많이 들어는 봤는데 뭔지 아리송한가요?
간단히 설명하면 다음과 같죠.

서버와 클라이언트에 대해 아시죠.
현재 이 화면을 보고 계신 분의 경우 서버는 현재 저의 홈페이지를 보내주는 컴퓨터구,
클라이언트의 본인의 컴퓨터라고 생각하시면 쉽죠.
인터넷은 클라이언트가 서버에 접속해서 원하는 문서를 요청하면 서버가 보내주고
연결을 끊는 형식으로 구성되어 있습니다.
그러므로 서버와 클라이언트는 서로에 관한 정보를 가지고 있기가 어렵습니다.

잠깐 여기서 질문!
서버와 클라이언트가 서로에 관한 정보를 가지고 있어야 하는 경우는 어떤 경우죠?
대표적인 경우가 로그인하는 경우입니다.
NETIAN이나 HANMAIL같은 경우 로그인하는 것이 있을겁니다.
한번 로그인하면 더이상 로그인하지 않죠. 왜일까요?
서버가 현재 접속해 있는 놈이 누구인지 알려면 어딘가에 접속할때 넣었던
아이디와 패스워드를 기억해 두어야 하겠죠.
이때 그 기억을 클라이언트에 시키는 방법을 쿠키라고 합니다.
쉬운 내용을 괜히 길게 얘기했나요.
부디 이해하셨길 바랍니다. 이해 안가면 갈때까지 계속 읽으세요.


이런 쿠키를 이용하면 현재 접속한 사람이 언제 접속했는지를 알 수 있습니다.
방문객이 접속할 때 시간을 쿠키로 저장시켜 놓고 다시 접속할 때 키값을 가져와 비교해보면
접속한지 얼마나 지났는지 알 수 있겠죠.
한시간 이상 지나면 다시 접속한 걸로 카운터를 증가시키면 어떨까요.
이제 대략적인 것을 아셨을 것 같으니 본격적으로 만들어 봅시다.


--------------------------------------------------------------------------------

제 2 단계 PHP를 사용한 COOKIE 설정

PHP3은 기본적으로 cookie를 사용할 수 있도록 SetCookie() 함수를 가지고 있습니다.
자세한 형식은 위에 링크로 들어가서 보시구. 간단한 형식은 아래와 같습니다.

SetCookie(쿠키이름, 저장할 값, 유효시간);

위에서는 처음 접속할 때 시간을 저장해두고 다시 접속할 때 이값을 읽어와 비교한다고 했는데,
실제적으로는 유효시간을 이용하는 것이 훨씬 간단합니다.

처음 접속할 때

SetCookie("php","old",time()+3600);
// 이것은 $php란 변수에 "old"란 값을 현재 현재시간 이후 1시간(3600초)까지를
// 유효시간으로하여 저장한다는 뜻입니다.

과 같이 쿠키를 저장해두고 나서, 다시 접속할 때 쿠키값($php)을 불러옵니다.
이때 유효기간이 지났으면 아무것도 없는 값(null)을 보내주고,
유효기간이 지나지 않았으면 저장해두었던 값(old)을 보내줍니다.
즉, 처음 접속하구 1시간동안은 계속 "old"란 값을 보내줍니다.

이것을 이용하면 간단히 다음과 같이 할 수 있죠.
if($php =="old") {
//1시간 이내에 접속한 경우 => 카운터를 하지 말아야 겠군요.
}else {
//처음 접속하거나 1시간후에 접속한 경우 => 카운터를 시켜야겠죠.
}


--------------------------------------------------------------------------------

제 3 단계 카운터를 화일로부터 읽고 쓰기

간단히 Cookie를 이용한 카운터를 만들방법을 알아보았는데 그럼 카운터된 값을 어딘가에 저장해야 겠죠.
이것은 어디다 해야 할까요?
당연히 서버에 해야겠죠.
그럼 서버에 저장하는 방법에는 뭐가 있죠?
화일형식과 데이타베이스가 있죠. 여기서는 화일을 이용하겠습니다.
화일을 읽고 쓰기 위해 화일을 열어고 닫아야 하는데 PHP3는 다음과 같은 함수를 지원합니다.

화일 포인터로 쓸 변수 = fopen ( 화일이 있는 물리적인 주소,화일을 열 mode);
fclose(화일 포인터);

글구 화일에서 읽어오는 것은
$no = fgets(화일 포인터, 화일 포인터 위치 뒤로 읽어들일 글자수);

그다음으로 화일에 쓰는 것은
fput(화일 포인터, 화일포인터 위치로부터 쓸 값);

여기서는 다음과 같이 사용할 겁니다.

$file = fopen("count.dt","r+");
// php실행화일이 있는 디렉토리에 있는 count.dt란 화일을 읽기쓰기모드("r+")로 엽니다.
$no = fgets($file,100);
// 화일 포인터 $file에서 100개의 문자를 읽어온다. 100개가 안되었는데
// 줄이 바뀌어 있으면 그만 읽는다.
fput = ($file,"$num");
// $num변수 안에 들어있는 값을 화일 포인터 위치에 쓴다.
fclose($file);
// 파일 포인터가 $file인 파일을 닫는다.



--------------------------------------------------------------------------------

제 4 단계 완성된 소스

주의! 미리 count.dt란 화일을 밑의 소스와 함께 같은 디렉토리에 만들어 놓아야 한다.
물론 count.dt의 퍼미션은 "chmode 666", 밑의 소스의 퍼미션은 "chmode 755" 이어야 한다.
$FILE = fopen ("count.dt","r+");
//count.dt란 화일을 읽고 쓰기 모드로 연다.
// r+모드로 열면 화일 포인터는 그 화일의 처음을 가리킨다.
$no = fgets($FILE,100);
//현재 화일포인터위치(처음위치)에서 줄바꿈없이 최고 100개의 문자를 읽어온다.
//화일 안에는 카운터 숫자만 있으니 그것만 읽고 그만 읽을 것이다.
if ($php == "old") { //쿠키변수 php를 읽어와 그 값이 old인지를 비교한다.
//$php값이 old면 이미 한시간 전에 방문한 것이므로 카운트 하지 않고
// 쿠키 변수의 유효시간을 $php를 1시간 후로 다시 설정한다.
SetCookie("php","old", time()+3600);
}else {
//$php값이 old가 아닌 경우로 처음 방문하거나 시간이 경과한 후로 카운터를 증가한다.
$num = 1 + $no;
fseek($FILE,0);
//화일포인터의 위치는 문자를 읽거나 쓰면 그 마지막으로 이동하므로 다시 처음으로 되돌린다.
fputs ($FILE, "$num");
//화일에 증가한 값을 저장한다.
$no = ""+$num;
SetCookie("php","old", time()+3600);
//쿠키변수를 설정한다.
}
fclose($FILE);
?>

당신은 번째 방문객이십니다. //echo는 뒤에 나오는 값을 화면 출력하는 함수이다.

덧글 쓰기 | 엮인글 쓰기 이 포스트를..



전체 포스트 보기

0 Comments:

Post a Comment

<< Home