묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
카운터만들기에서 한가지 이해가 안가는 곳이 있어요...
2002.08.21 21:42
아래는 비혼님의 강의중 카운터 만들기 인데 한곳이 이해가 잘 안가네요...
과정5,6부분인데...
과정5부분은 접속자 아이피와 기록되어 있는 아이피가 틀리경우 실행되는부분으로 알고 있어요..
과정6부분은 접속자 아이피와 기록되어 있는 아이피가 같을경우 실행되는 부분이고요..
예를들어 접속자 아이피와 기록되어 있는 아이피가 같아서 과정6부분이 실행된다고 치면은..
"if ($check)"에서 $check의 변수값은 참인지 거짓인지 알수 없는게 아닌가요?
실행이 안된 과정5부분에서 $check의 변수값을 정해놓았으니까요..
실행이 안되곳에서 정의된 $check의 변수값이 과정6부분에서 어떻게 "if ($check)"의 값으로 갔는지 잘 이해가 안가네요..
설명좀 해주세요~~~
<?
// 과정 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; // 카운트 출력
?>
과정5,6부분인데...
과정5부분은 접속자 아이피와 기록되어 있는 아이피가 틀리경우 실행되는부분으로 알고 있어요..
과정6부분은 접속자 아이피와 기록되어 있는 아이피가 같을경우 실행되는 부분이고요..
예를들어 접속자 아이피와 기록되어 있는 아이피가 같아서 과정6부분이 실행된다고 치면은..
"if ($check)"에서 $check의 변수값은 참인지 거짓인지 알수 없는게 아닌가요?
실행이 안된 과정5부분에서 $check의 변수값을 정해놓았으니까요..
실행이 안되곳에서 정의된 $check의 변수값이 과정6부분에서 어떻게 "if ($check)"의 값으로 갔는지 잘 이해가 안가네요..
설명좀 해주세요~~~
<?
// 과정 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; // 카운트 출력
?>
댓글 3
-
이상옥
2002.08.21 23:20
아이피가 같이 때문에 check가 0이라서 과정6을 건너뛰어 기록이 안되는게 맞지 않나요? ^^* -
myself2
2002.08.22 17:59
if($check) 라는걸.. 이렇게 이해 하시면 쉬울꺼 같네요..
$check 값이 있으면 실행하라....~!
php에선... 변수 선언이라는게 따로 필요 없죠.. ~
그냥.. 변수 사용하기 전에.. 한번이라도.. 그 변수에 값을 넣어줬으면..
그 변수에 값이 들어 있는거고..
없으면.. 그냥.. 값이 없는체.. 바로 사용하는거죠..~!! -
코코
2002.08.22 19:05
하하..감솨...
이제야 알겠네요...