주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

자신만의 카운터를 가져보자 (기초2)

네로 | 2003.02.24 03:53:20 댓글: 0 조회: 489 추천: 13
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758938
▶ 자신만의 카운터를 가져보자 (기초2)


"자신만의 카운터를 가져보자 (기초)"편에서 카운터를 실제 제작하고, 이를 페이지에
작용해보았습니다. 하지만 조금 마음에 걸리는 부분이 있었죠? 바로 새로고침을 할
경우 무조건 수치가 올라간다는 점입니다. 이를 방지하기 위한 방법은 여러가지가
있습니다.

먼저 전편의 순서를 다시 한번 살펴볼까요?

1. 카운터 수치가 저장될 파일명을 지정한다.
2. 파일의 존재유무를 확인해 없을 경우 0값을 주어 파일을 만든다.
(해당 파일의 권한을 777로 변경해두면 FTP로 접속했을때 본인이 제어 가능)
3. 파일을 읽어온다.
4. 해당 값에 1을 더한다.
5. 새로운 값을 파일에 기록한다.
6. 카운트 값을 출력한다.


위 과정 중 4번을 보세요. 해당 값에 1을 더했죠? 무조건 증가하는 것은 저 과정
때문이니 이를 막기 위해선 저 부분을 보강해야 합니다. 어떻게 보강하면 좋을까요?
이번 편에서는 파일에 하나의 값을 더해 이용하는 방법을 알아보겠습니다.


처음 제작했던 카운터에서 수치가 기록되는 파일이 있었죠? 단순히 수치만 기록되는데
여기에 접속한 사람의 IP까지 같이 기록하면 어떻게 될까요? 처음 IP를 비교해 같다면
카운터를 그대로 두고, 틀리다면 카운터를 올리면 되니까요. 새로운 카운터의 순서를
생각해봐야겠죠?

1. 카운터 수치가 저장될 파일명을 지정한다.
2. 파일의 존재유무를 확인해 없을 경우 0:0값을 주어 파일을 만든다.
(해당 파일의 권한을 777로 변경해두면 FTP로 접속했을때 본인이 제어 가능)
3. 파일을 읽어온다.
4. 해당 값을 : 단위로 하나는 IP, 하나는 카운터 값으로 분리한다.
5. 위의 IP 값과 현재 접속한 사람의 IP 값이 다를 경우 카운트 값을 1 더함
6. 새로운 값을 파일에 기록한다. (5번에서 변수를 하나 더 두면 구분 가능)
7. 카운트 값을 출력한다.

새로운 순서대로 프로그램을 작성해볼까요?


▷ 파일명 : count.php
================================================================================
<?
// 과정 1 : 카운터 수치가 저장될 파일명을 지정한다.
$count_file = "count.dat"; // 수치가 기록될 파일명

// 과정 2 : 파일의 존재유무를 확인해 없을 경우 0:0값을 주어 파일을 만든다.
if (!file_exists($count_file)) { // 만약 !(파일이 있으면) = 만약 (파일이 없으면)
$makefile = fopen($count_file,"w"); // 해당 파일을 쓰기 모드로 오픈
fwrite($makefile,"0:0"); // 0:0을 파일에 기록
fclose($makefile); // 파일을 닫기
chmod($count_file,0777); // 파일의 권한을 변경한다.
}

// 과정 3 : 파일을 읽어온다.
$readfile = fopen($count_file,"r"); // 파일을 읽기 모드로 오픈
$read = fread($readfile,filesize($count_file)); // 크기만큼 읽어들임
fclose($readfile); // 파일 닫기

// 과정 4 : 해당 값을 : 단위로 하나는 IP, 하나는 카운터 값으로 분리한다.
list($ip,$count) = explode(":",$read); // : 단위로 분리

// 과정 5 : 위의 IP 값과 현재 접속한 사람의 IP 값이 다를 경우 카운트 값을 1 더함
if ($REMOTE_ADDR != $ip) { // 현재 접속한 사람의 IP와 저장된 IP가 다를 경우
$count++; // 값 1 증가
$check = 1; // $check 변수의 값을 1로 지정
}

// 과정 6 : 새로운 값을 파일에 기록한다. (5번에서 변수를 하나 더 두면 구분 가능)
if ($check) {
$writefile = fopen($count_file,"w"); // 파일을 기록 모드로 오픈
fwrite($writefile,"$REMOTE_ADDR:$count"); // IP:카운트 값을 기록
fclose($writefile); // 파일 닫기
}

// 과정 7 : 카운트 값을 출력한다.
echo $count; // 카운트 출력
?>
================================================================================

새롭게 추가된 부분을 살펴볼까요? $REMOTE_ADDR, list(), explode() 등이 있군요.
먼저 $REMOTE_ADDR 이란 변수에는 현재 접속한 사람의 IP 주소가 저장되어 있습니다.
어떠한 값도 지정하지 않았는데 IP값이 들어있으니 이상하다구요? ^^ 쉽게 기본적으로
지정된 변수라고 생각하시면 편하답니다.

explode() 함수는 특정한 값을 기준으로 분리해 배열에 값을 넣어주는 역할을 합니다.
아래 간단한 형태의 예제를 들어볼까요?

▷ 파일명 : explode.php
================================================================================
<?
$string = "123:456:789:0";
$test = explode(":",$string);
echo $test[0]."<br>";
echo $test[1]."<br>";
echo $test[2]."<br>";
echo $test[3]."<br>";
?>
================================================================================

이를 실행하면 아래와 같은 결과 화면이 출력됩니다.

================================================================================
123
456
789
0
================================================================================

list() 함수는 변수들을 배열처럼 사용하고자 할 때 사용합니다. 위의 카운터에서
list($ip,$count) = explode(":",$read); 이렇게 쓰였죠? :을 기준으로 분리했을때
두개의 값으로 나뉘는 것을 차례로 $ip, $count 변수에 넣었죠. 이럴 때 사용합니다.

새로고침을 아무리 눌러봐도 수치는 증가하지 않습니다. 페이지를 새로고침할때마다
수치가 올라가는 카운터보다는 보다 정확하겠죠?

전편의 index.html 파일을 그대로 이용해도 됩니다. 프로그램만 바뀌었으니까요.

처음부터 게시판 등의 커다란 프로그램을 만들 수 있을까요? 물론 공부하면서 만들 수
있습니다. 하지만 중간중간 많이 막히겠죠. 처음부터 한발 한발 차근차근 준비한 다음
커다란 프로그램을 작성해도 늦지 않습니다.

그럼 다음 강의에서 뵙도록 하겠습니다. 꾸벅...


▷ 미리보기 : http://dreamphp.com/study2/count2/count.php
▷ 소스보기 : http://dreamphp.com/study2/count2/count.phps
▷ 예제문서 : http://dreamphp.com/study2/count2/index.html
      : http://dreamphp.com/study2/count2 (기본 문서 파일명 생략 가능)

▷ 미리보기 : http://dreamphp.com/study2/count2/explode.php
▷ 소스보기 : http://dreamphp.com/study2/count2/explode.phps

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

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (13) 선물 (0명)
IP: ♡.27.♡.234
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11940
관리자
2003-09-20
11488
관리자
2003-09-20
20621
지구인
2010-08-27
19413
지구인
2009-09-07
13735
SOLIDH
2010-01-29
15693
엔죠라이프
2004-10-07
16784
네로
2003-02-24
394
네로
2003-02-24
515
네로
2003-02-24
411
네로
2003-02-24
489
네로
2003-02-24
466
네로
2003-02-24
787
네로
2003-02-24
991
네로
2003-02-24
498
네로
2003-02-24
483
네로
2003-02-24
510
네로
2003-02-24
693
네로
2003-02-24
617
네로
2003-02-24
433
네로
2003-02-24
371
네로
2003-02-24
363
네로
2003-02-24
516
네로
2003-02-24
428
네로
2003-02-24
386
네로
2003-02-24
434
네로
2003-02-24
486
네로
2003-02-24
465
모이자 모바일