4강 : txt파일로 카운터를 만들자
카운터라는거 아십니까? 투데이같은거 표시하는거죠. “본사이트 일일방문자수는 n명” 따위가 카운터입니다. DB(데이터베이스, 줄여서 디비)를 이용하면 좋겠지만 아직 초보단계니까 txt파일을 이용해봅시다.
(1) C:\APM_Setup\htdocs 에 counter.txt 라는 파일을 만들어둡니다.
내용은 0 하나만 써두시고요. 초기값이죠.
(2) 오늘 배울 소스는 다음과 같습니다.
|
<html> <body> $fp = fopen(“counter.txt”, “w”); # echo “카운터 : $count”; ?> |
저는 이 파일이름을 noname2.php 로 저장했습니다.
http://localhost/noname2.php 로 확인해보니 잘 됩니다. 새로고침하니까 카운터가 올라가네요.
잘되네요.jpg
3) 프로그래밍을 배우는 법은 항상 똑같습니다!
지금 제가 위에 쓴 소스를 베껴서(복사-붙여넣기) 되는지 안되는지 우선 확인하세요!
실행에 성공했다면 혼자 스스로 한 줄씩 들여다보는겁니다.
한 줄씩 보며 원리를 파악하는게 최고입니다.
물론 고통스럽죠, 원리 파악이라는게. 근데 무언가를 배운다는건 다 그래요.
4) 일단 상식하나 배우고 갑니다.
|
상식 하나 : 변수 $(달러)는 변수를 나타냅니다. $뒤에 이름을 붙이면 그게 변수죠. $data, $man, $energy…
사용은 아래와 같이 하면 되겠죠. $a = 1+1; “1+1을 변수a에 집어넣어라”라는 뜻이니까, a값은 2가 되겠네요. |
변수를 모른다면 저번 3강을 참조하시면 됩니다. C, PHP, 자바를 막론하고 필수상식이죠.
5) $data = file(“counter.txt”);
이게 무슨 뜻일까요.
data라는 변수에 counter.txt라는 파일을 집어넣는거네요.
|
상식 둘 : 함수 위의 file과 같은걸 ‘함수’라고 합니다. 여러분도 함수를 하나 알고있죠. echo. echo는 기본적인 출력함수입니다, C에는 비슷한걸로 printf란 함수가 있어요. 그냥 “뭔가 하게해주는 걸” 함수라고합니다. 너무 대충 설명했나? file은 텍스트파일 따위를 가져오는 함수 정도가 되겠네요. |
근데 텍스트파일은 여러 줄이니까
대충 배열이라는 걸로해서 들어가겠네요. 힘들겠지만 참고 상식하나만 더 들읍시다.
|
상식 셋 : 배열 배열이라는게 있습니다. $mat 라는 변수가 있다고 합시다. 근데 이게 여러개 필요한 경우가 있어요.
그럼 $mat[0], $mat[1], $mat[2]… 이런식으로 변수를 만들어둘 수 있죠. 이런걸 배열이라 합니다. 이건 1차 배열이죠.
$mat[0,0], $mat[0,1] … 이런식으로 가면 2차 배열. 3차 배열도 만들 수 있고요. $mat[4,2,3] 이런거요. |
다시 텍스트파일 얘기로 돌아가서,
txt파일의 첫줄은 $data[0]에, 두번째줄은 $data[1]에, 세번째줄은 $data[2]에… 순차적으로 들어갈겁니다.
file함수를 썼기 때문에.
다만, 지금 저희가 만든 txt파일에는 0 이라는 한 줄 밖에 없으니까
$data[0]에만 값이 들어갔겠네요.
정리하면,
|
file 함수 텍스트파일을 변수에 넣어준다. 여러줄이니까, 첫줄부터 행렬식으로 넣어준다. 즉, $a = file(“텍스트파일.txt”); 은 텍스트를 한줄씩 a변수에 넣어준다. a[0], a[1],… a[n]까지 |
6) $count = trim($data[0]);
이건 count라는 변수에 data[0]을 넣는거네요.
즉, 카운트변수에 첫줄이 들어갑니다(“카운트라는 변수가 카운트.txt 첫줄을 기억합니다”와 같은말)
그럼 trim이란 뭘까요?
|
trim 함수 앞뒤 공백이나 개행문자를 없애준다. a의 값이 ” 하하 ” 라고 하면 trim($a); 하면 “하하”로 값이 바뀐다. 지금 여기서 tirm을 쓰는 이유는 뒤의 개행문자를 없애기 위함이다. 개행문자란 엔터키같은 숨겨진 문자를 말한다. 텍스트파일은 엔터키를 기억하고 있다. 예컨대 ‘0’이 아니라 ‘0\n’ 이렇게 기억하고 있다. 그래서 trim을 써주면 뒤의 \n이 떨어져나가게 된다.
chop 함수 비슷한건데, 뒤쪽만 없애주는거다. chop($a); 이런식으로 쓰면된다. |
7) $inc_count = $count + 1;
설명 필요없죠.
인크_카운트 변수는 지금 카운트 변수에 1을 더하게됩니다.
그럼 처음에 들어가면 1, 두번째로 들어가면 2, 세번째로 들어가면 3의 값을 갖겠죠.
(이게 이해가 안간다면 차근히 원소스를 보시기 바랍니다. 이해되어야만 해요!
이해 안간다면 ‘변수’를 모르거나 심각한 문제입니다. 절대로 알고 넘어가십시오)
8) $fp = fopen(“counter.txt”, “w”); #
중요한 부분이죠.
|
fopen 함수 파일을 여는 함수죠. “w”는 열때 모드를 지정합니다. 예컨대 “r” : 읽기모드(read) “w” : 쓰기모드(write) “a” : 추가하기(append) 이런거죠. 쓰기모드로 열어놨으니 counter.txt를 변경가능하다는거죠. 오호~ |
9) fwrite($fp, $inc_count);
|
fwrite 함수 파일을 새로 쓰는거죠. “$fp에다가 $inc_count를 쓴다”라는 의미정도.
$fp는 아까 우리가 쓰기모드로 불러온 counter.txt죠. |
10) fclose($fp);
|
flose 함수 fopen을 했으니 fclose를 해야죠.
절대법칙, 연 것은 닫아준다. 나중에 게임프로그래밍 할때 이런걸 잘 못하면 게임이 꺼져도 메모리가 새게되죠(메모리 누수=낭비) |
11) echo “카운터 : $count”;
카운트 변수를 출력합니다. echo함수는 알고 계시죠?
——————————————————————————————————–
이상으로 강좌를 마치며.
오늘 함수를 참 많이 배웠는데요. 그냥, “아 이게 이러한 원리구나”
“대충 이런 함수가 있구나”정도만 알면됩니다.
나중에 뭔가를 만들고 싶을 때 어렴풋한 기억으로 검색하고,
이런 예제보면서 자기 프로젝트에 적용시키면 되는겁니다.
앞뒤 공백 짜르는 함수가 있다는거(trim), 텍스트 파일을 불러내서 고칠 수 있다는거(fopen으로 열고, fwrite로 새로 쓰며, fclose로 닫는다), 화면에 글자를 출력할 수 있다는거(echo) 정도 아시면 되겠네요.
수고하셨습니다.