주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
연길시 신화서점 조선말 도서

자신만의 카운터를 가져보자 - 최종 1/2

광수 | 2001.10.17 00:32:20 댓글: 0 조회: 565 추천: 14
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758814
▶ 자신만의 카운터를 가져보자 - 최종 1/2

파일 카운터의 마지막 시간을 가져보도록 하겠습니다. 기존에 다룬 카운터도 개인
홈페이지에서 사용하는데 문제없을 정도(물론 많이 부족하지만요)지만 이보다 더
확실한 카운터를 만들어보도록 하겠습니다. 내용이 길기 때문에 차근차근 읽어보셔야
할 것입니다. ^^; (내용 길다고 지레 겁먹고 포기하지 마세요~)


먼저 이번에 다룰 카운터는 아래와 같은 값들을 저장 및 출력해줍니다. 참 많죠? ^-^;

================================================================================
전체방문객,오늘방문객,어제방문객,최고방문객,시간대별방문객,요일별방문객
전체페이지뷰,오늘페이지뷰,어제페이지뷰,최고페이지뷰,시간대별페이지,요일별페이지
================================================================================

이런 기능의 카운터를 만들기 위해서는 깔끔한 순서부터 생각해둬야겠죠?


▷ 카운트값은 어디에 저장할 것인가...

파일을 이용한 프로그램이니, 파일에 저장되겠죠? 방문객과 페이지뷰값을 저장하기
위한 파일과, IP 기록을 위한 파일 총 두개의 파일에 저장하면 되겠죠?


▷ 그럼 파일에 어떤 형태로 저장할 것인가...

IP를 기록하는 파일의 경우 IP만 쭉 저장되는 형태로 간단하고, 방문객이나 페이지뷰
경우에는 각 항목값들마다 10바이트씩의 자리를 차지합니다. 0부터 99억 9999만
9999까지 표현되니 부족함은 없겠죠? 실제 프로그램을 작성한 후에 다시 한번
설명하도록 하겠습니다.


▷ 순서는 어떻게 되는가...

기존 카운터와 동일합니다. 방문객이 방문할 경우 방문객의 IP가 기존 파일에
기록되어있는지의 여부를 검사해 없다면 방문객 수를 1씩 올리는거죠. 하지만 이번
카운터의 경우 페이지뷰를 두었기 때문에 방문객 수 외에도 페이지뷰값을 무조건
올리는 과정도 추가되어야 하며, 이미 하루가 지나 쓸모없어진 IP가 기록된
파일을 지우는 과정도 추가되어야 합니다. ^^;


▷ 순서를 비교적 자세히 적어보자면...

1) 카운터 파일의 경우
<?
  만약 (어제 파일이 있다면) 어제 파일 삭제;
  만약 (오늘 파일이 없다면) 오늘 파일 생성(빈파일);
  오늘 파일을 읽기/쓰기 모드로 연다.
  오늘 파일의 포인터를 처음으로 옮긴다.
  오늘 파일의 처음 부분부터 마지막 부분까지 내용을 읽어온다.
  데이터 파일을 읽기/쓰기 모드로 연다.
  만약 (오늘파일내용에서 현재 접속한 사람의 IP를 발견하지 못했다면) {
    오늘 파일의 마지막으로 이동해 IP를 기록한다.
    데이터 파일의 방문객에 관련된 숫자를 1씩 올린다.
  }
  페이지뷰와 관련된 숫자를 1씩 올린다.
  만약 (오늘 방문객값이 최고방문객값보다 크다면) 최고방문객 수정;
  만약 (오늘 페이지뷰값이 최고페이지뷰값보다 크다면) 최고페이지뷰값 수정;
  데이터 파일을 닫는다.
  오늘 파일을 닫는다.
?>

2) 정보 파일의 경우 (시간대별,요일별 방문객수와 페이지뷰수를 출력)
<?
  데이터 파일을 읽기 모드로 연다.
  파일의 모든 내용을 읽는다.
  데이터 파일을 닫는다.
  읽어들인 값을 이용해 적당한 정보를 출력한다.
?>


▷ 오늘 파일과 어제 파일은 어떻게 구할 수 있는가...

date() 함수를 이용하면 간단히 구할 수 있습니다. 사용법은 date(형식,timestamp)
입니다. 여기서 잠깐. timestamp란 1970년 1월 1일 오전 9시부터 지금까지의 지나온
시간을 초로 나타낸 수를 말합니다. 만약 timestamp를 지정하지 않으면 현재의
timestamp가 기본적으로 쓰여집니다.

쓰여지는 형식으로는 aAdDFhHijlmMsStwyYz 등이 있는데 이번 과정에서 필요한 형식은
모두 5개입니다. ^-^ (적어서 안도의 한숨 휴=3) 년,월,일,시간대,요일대 총 5개. ^^

[date1.php]
--------------------------------------------------------------------------------
<? echo date("Y년 m월 d일"); ?>
--------------------------------------------------------------------------------

위 코드를 실행하면 "2001년 09월 10일"이라고 출력됩니다. 이 값들을 이용하면 되죠.
예제와 주석으로 실제 오늘 파일을 구하는 과정을 볼까요?

[date2.php]
--------------------------------------------------------------------------------
<?
$temp = date("Y-m-d"); // "년-월-일"값을 구해 $temp 변수에 저장
$date = explode("-",$temp); // $temp의 값을 하이픈(-) 기준으로 분리해 저장
$today_file = $date[1].$date[2].".cgi"; // 결국 "0910.cgi" 파일명을 구했죠?
echo "오늘 파일 : $today_file";
?>
--------------------------------------------------------------------------------

그러면 어제 파일은 어떻게 구할 수 있을까요? 이때는 mktime() 함수를 사용해야
합니다. mktime() 함수의 괄호 안에 시,분,초,월,일,년값을 인자로 주어 그에
해당하는 timestamp값을 얻을 수 있습니다. 여기에서 어제 날짜를 구해야 하기
때문에 인자값 중 일 값에 1을 빼주면 되겠죠? 실행결과 - "오늘 파일 : 0910.cgi"

[date3.php]
--------------------------------------------------------------------------------
<?
$temp = date("Y-m-d"); // "년-월-일"값을 구해 $temp 변수에 저장
$date = explode("-",$temp); // $temp의 값을 하이픈(-) 기준으로 분리해 저장
$yesterday = mktime(0,0,0,$date[1],$date[2]-1,$date[0]);
echo date("Y-m-d",$yesterday); // 어제 날짜 출력
?>
--------------------------------------------------------------------------------

위 코드를 실행하면 "2001-09-09"라고 출력됩니다. 오늘이 2001년 09월 10일이니
어제 날짜가 맞죠? ^-^; 결국 위에서 오늘 날짜 파일 구하던 식으로 어제 날짜를
구하면 되겠죠?

[date4.php]
--------------------------------------------------------------------------------
<?
$temp = date("Y-m-d"); // "년-월-일"값을 구해 $temp 변수에 저장
$date = explode("-",$temp); // $temp의 값을 하이픈(-) 기준으로 분리해 저장
$today_file = $date[1].$date[2].".cgi"; // 오늘 "0910.cgi"
$yesterday = mktime(0,0,0,$date[1],$date[2]-1,$date[0]); // 어제 timestamp 구함
$yester_temp = date("Y-m-d",$yesterday); // "년-월-일"값을 구함
$yester_date = explode("-",$yester_temp); // - 기준으로 분리
$yesterday_file = $yester_date[1].$yester_date[2].".cgi"; // 어제 "0909.cgi"
echo "오늘 파일 : $today_file / 어제 파일 : $yesterday_file";
?>
--------------------------------------------------------------------------------

오늘과 어제날짜의 파일을 구하는 코드였는데 굉장히 복잡해보이죠? 코드 정리도
안하고, 주석까지 뒤에 이어붙여 그래요. 차근차근 살펴보도록 하세요. 이 코드는
실제 프로그램 작성시 훨씬 간단한 형태로 표현하겠습니다. 지금은 이해 과정 때문에
어쩔 수 없네요. 실행결과는... "오늘 파일 : 0910.cgi / 어제 파일 : 0909.cgi"


▷ 시간대와 요일대는 어떻게 구할 수 있는가...

[date5.php]
--------------------------------------------------------------------------------
<? echo date("H-w"); ?>
--------------------------------------------------------------------------------

실행하면 "17-1"이라고 출력됩니다. 17은 현재 시를 24시간제로 표현한 값, 1은
요일을 0부터 6까지의 값으로 표현한 값입니다. 일요일이 0부터 시작되니 월요일은
1이 되는게 당연하겠죠? ^-^

[오후 2시 반쯤부터 썼거든요. 쓰고 지우고, 다시 쓰고 지우고... 그러다 보니 시간이
이만큼 흘렀네요.]


▷ 현재 접속한 사람의 IP는 어떻게 구할 수 있는가...

[ip.php]
--------------------------------------------------------------------------------
<? echo $HTTP_SERVER_VARS["REMOTE_ADDR"]; ?>
--------------------------------------------------------------------------------

위 코드를 실행하면 "123.123.123.123"과 같은 형태의 IP 값이 출력됩니다. 현재
접속한 사람의 IP 정말 쉽게 구할 수 있죠? ^^;


▷ 파일 읽기, 쓰기, 검색 등은...

<?
$파일핸들 = fopen("파일명","모드-r");
$임시변수 = fread($파일핸들,읽어들일크기);
fclose($파일핸들);
?>

위와 같은 코드로 특정 파일의 내용을 읽을 수 있습니다. 파일을 기록하기 위해서는
모드 w로 지정하고, fwrite() 함수를 이용해야겠죠? 이는 실제 카운터 프로그램의
소스를 설명하는 과정에서 다루도록 하겠습니다. [파일 처리에 필요한 함수는 이미
전 강의에서 다루었습니다. 잘 기억나지 않는 분은 다시 한번 전 강의를 보세요~]

검색은 이렇게 읽어들인 $임시변수의 값에서 IP가 있는지 없는지 문자열 검색 함수나
정규표현식등을 이용하면 되겠죠? 마찬가지로 실제 카운터 프로그램의 소스를
설명하는 과정에서 다루도록 하겠습니다.


▶ 다음 회에서 실제 프로그램 작성과 함께 부가 설명을 하도록 하겠습니다.

▷ 미리보기 : http://dreamphp.com/study2/count4-1/date1.php
▷ 소스보기 : http://dreamphp.com/study2/count4-1/date1.phps

▷ 미리보기 : http://dreamphp.com/study2/count4-1/date2.php
▷ 소스보기 : http://dreamphp.com/study2/count4-1/date2.phps

▷ 미리보기 : http://dreamphp.com/study2/count4-1/date3.php
▷ 소스보기 : http://dreamphp.com/study2/count4-1/date3.phps

▷ 미리보기 : http://dreamphp.com/study2/count4-1/date4.php
▷ 소스보기 : http://dreamphp.com/study2/count4-1/date4.phps

▷ 미리보기 : http://dreamphp.com/study2/count4-1/date5.php
▷ 소스보기 : http://dreamphp.com/study2/count4-1/date5.phps

▷ 미리보기 : http://dreamphp.com/study2/count4-1/ip.php
▷ 소스보기 : http://dreamphp.com/study2/count4-1/ip.phps

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (14) 선물 (0명)
IP: ♡.149.♡.65
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11866
관리자
2003-09-20
11413
관리자
2003-09-20
20546
지구인
2010-08-27
19342
지구인
2009-09-07
13663
SOLIDH
2010-01-29
15622
엔죠라이프
2004-10-07
16718
광수
2001-10-17
424
광수
2001-10-17
575
광수
2001-10-17
718
광수
2001-10-17
372
광수
2001-10-17
445
광수
2001-10-17
709
광수
2001-10-17
591
광수
2001-10-17
565
광수
2001-10-17
597
광수
2001-10-17
502
광수
2001-10-17
622
광수
2001-10-17
832
광수
2001-10-17
792
광수
2001-10-17
628
광수
2001-10-17
786
광수
2001-10-17
450
광수
2001-10-17
508
광수
2001-10-17
445
광수
2001-10-17
656
광수
2001-10-17
508
광수
2001-10-17
732
모이자 모바일