본문 바로가기
프로그래밍/PHP

[PHP] 함수 / 카운터 만들기 / 파일 핸들링 개념

by B T Y 2017. 8. 6.
반응형

함수 / 카운터 만들기/ 파일 핸들링 개념에 대해서 정리한다.



- 함수



function 함수명 ( $인자1, $인자2, $인자3, ... )
{
    echo "함수 출력!!";
    return 되돌려줄값;
}



* 함수선언이 호출보다 나중에(아래쪽에) 되어있어도 호출이 가능하다.
* 함수안의 함수를 선언하면 바깥쪽에 있는 함수를 호출하기전까지는 안에 있는 함수를 사용할수 없다.
* php에서는 함수 오버로딩을 지원하지 않는다. 즉, 같은 이름의 함수를 사용할수 없다.
  ( 오버로딩이란 함수의 이름이 같으면서 인자의 데이터형이나 인자의 수가 다른것을 서로 다른 함수로 받아들이는 것을 말한다 )



- 함수에 인자 넘겨주기

1) 값에 의한 전달 ( passing by value )
변수를 통해 값을 전달하거나 직접적으로 값을 전달하는 방법

2) 참조에 의한 전달 ( passing by reference )
참조를 통해 전달받은 변수는 수정하면 원래 변수까지 영향을 미치게 된다.

3) 기본 인자값
함수 인자에 기본 인자값을 설정해두고 인자값이 없을때는 기본인자값을 이용하게 된다.



( 위처럼 기본 인자를 설정해두면 함수 호출시에 인자값이 없을때는 기본 인자를 사용하게 된다 )



- 값 되돌려 주기

1) 값을 되돌려 주기
return을 이용해서 변수나 배열 같은 값을 돌려줄수 있다.

2) 참조를 되돌려 주기





카운터 만들기


- 카운터 종류

1.일반 카운터: 카운터가 있는 페이지를 다시 읽을때마다 카운터가 올라감
2.쿠키 카운터: 쿠키라는 것을 이용해서 브라우저를 닫기전까지 단 1회만 올라감
3.세션 카운터: 세션이라는 것을 이용해서 세션이 살아 있을때까지 단 1회만 올라감

* 쿠키는 만료시간을 지정하여 그 시간이 지나면 삭제되거나 만료시간을 지정하지 않은 경우에는 브라우저를 닫으면 삭제된다.

* PHP4부터 세션을 지원하고 있다.

* 쿠키는 사용자의 컴퓨터에 저장되고 세션의 정보는 서버에 저장된다.
  ( 쿠키는 사용자에 의해 값이 변경되거나 거짓으로 생성될 수 있기 때문에 로그인 같은 경우에
    쿠키를 사용하면 보안상 문제가 된다 )


* 여기서는 쿠키를 이용해서 카운터를 만들어본다.


- 쿠키( Cookie )

SetCookie("쿠키이름", "쿠키값");

  * 가장 간단한 쿠키의 형태이고 SetCookie()안에는 이외에도 "유효시간", "디렉토리", "도메인", "보안", httponly 값이 들어갈수 있다.

  * 카운터를 사용하기 위해서 count.txt라는 파일을 카운터가 들어갈 페이지와 동일한 디렉토리에 만들어줬다.
    ( 실습이기 때문에 권한은 그냥 666으로 설정을해서 모든 사람들이 읽고 쓰기가 가능하도록 파일권한을 주었다 )



  - 카운터 만들기




[ 카운터 코드 흐름도 ]

1. 현재까지의 방문자수를 알기 위해 count.txt 파일을 열어 적혀있는 값을 $count로 가져온다.
    ( file() 함수는 반환값이 한줄 한줄 배열형태로 되기 때문에 $count 변수에 저장된 값을
      접근하기 위해서는 $count[0]과 같이 접근해줘야 한다 )

2. 파일에서 가져온 값의 쓰레기값(빈공간)을 없애기 위해서 chop() 함수를 이용한다.

3. 첫번째 접속인지를 확인하기 위해서 if(!$ip)를 이용한 필터링을 걸어주고 첫번째 접속이 아닌
   이미 접속된 상태였다면 저장되어있는 $count를 그대로 보여주고 첫번째 접속이라면
   새로운 방문자로인한 $count 값을 1 올려주고 count.txt 파일에 해당 카운터를 적어둔다.

  * 여기서 파일을 열때 사용하는 fopen("파일이름","파일모드")은 파일모드가 w,r,w+,r+등이 있고
    fwrite(열려진 파일의 핸들, 저장하고자 하는 값)을 이용해서 열려진 파일에 값을 추가할수 있다.

4. 이후에 새로운 방문자이므로 SetCookie() 함수를 이용해서 쿠키를 준다.

  * $REMOTE_ADDR은 환경변수의 일종으로 현재 페이지를 보고 있는 접속자의 ip가 들어있는 변수이다. 

      ( 이외에도 PHP에서는 다양한 환경변수를 제공하고 있다 )

5. 그 이후에는 카운터 출력부분에 해당 $count의 값을 출력해주게 되면 카운터에 대한 동작이 끝이난다.

  * 쿠키는 클라이언트의 PC에 저장되는것으로 서버에서 관리하는 세션과는 개념이 조금 다르다.
    ( 브라우저가 클라이언트 PC에 저장된 쿠키를 읽어와서 브라우저의 헤더에 정보를 써두면
      헤더정보를 PHP 코드가 가져와서 쿠키가 있는지 없는지를 확인하게 된다 )





파일 핸들링 개념



  - 파일 핸들링을 하는 이유를 앞에서 만든 카운터를 이용해서 설명하면 파일은 하나인데 방문자는 여러명이다.

    파일을 노트라고 생각하면 먼저 접속한 사람이 노트를 집어서 거기에 적힌 숫자에
    1을 더한후 노트를 다시 다른사람이 쓸 수 있게 있던 자리에 내려놓아야 한다.
    그런데 이 사람이 노트를 계속 들고 있다면 다른 방문한 사람들은 노트를 쓸수 없다.
    이렇기 때문에 fclose()와 같이 파일을 사용한 후에는 닫아줘야한다.
     ( 이런 이유에서 파일을 이용한 카운터는 소규모 사이트에만 사용이 가능하고
       중, 대규모 사이트에서는 카운터를 이용하려면 데이터베이스를 이용해야 한다 )

   - 파일핸들은 파일 포인터를 말하는데 $fp와 같은 이름의 변수를 많이 이용한다.
     파일의 어디부터 내용을 읽거나 쓸것인지를 파일 포인터를 통해서 그 위치를 가르키고 있다.
      ( 파일 포인터는 열린파일의 정보와 어느 위치에 커서가 있는지 정보를 가진다고 할 수 있다 )

     * 파일 핸들링을 생각할때 여러사람이 공동으로 사용하는 일기장이라고 생각하면
       조금더 이해하기가 쉬울수 있다.





반응형

댓글