PHP > LIBRARY > 파일-텍스트 카운터 만들기/파일-이미지 카운터 만들기/DB-이미지 카운터 만들기/시간대별 접속 통계 산출하기
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
그누보드
LIBRARY
  HOME > PHP > LIBRARY
 
파일-텍스트 카운터 만들기/파일-이미지 카운터 만들기/DB-이미지 카운터 만들기/시간대별 접속 통계 산출하기
작성일 : 10-02-10
조회 : 2,726  
   http://blog.daum.net/redcatoo/6328194 [643]

1. 파일-텍스트 카운터 만들기
 2. 파일-이미지 카운터 만들기
 3. DB-이미지 카운터 만들기
 4. 시간대별 접속 통계 산출하기
 
 
1. 파일-텍스트 카운터 만들기
 

 ▣ 파일-텍스트 카운터 만들기를 위한 준비 사항

    - 방문 횟수를 저장할 파일이 위치할 디렉토리의 접근모드를 707로 한다.

       chmod -R 707 [chap11]       

▣ 파일-텍스트 카운터: filecounter.html

     <?
     $datafile = "./filecounter.dat";

     // 파일이 존재하는지 확인
     $flag = file_exists($datafile);

     // 만약에 존재하면 파일 접근 모드 확인
     if ($flag) {
         $permission = fileperms($datafile);
         // 접근모드를 8진수 형태로 변형
         $octal = DecOct($permission);

         // 접근 모드가 707로 되어있지 않으면 chmod() 수행
         if ($octal != 100707) {
             $chmod = chmod ($datafile, 0707);
             if (!$chmod) {
                 echo "<font size=2 color=red>chmod() function Error</font><br>";
                 exit;
             }
         }

         // fileperms()함수를 수행하여 캐쉬에 남은 데이타를 삭제
         clearstatcache();

     // 만약에 존재하지 않으면 파일 생성
     } else {
         if (!touch($datafile)) {
             echo "<font size=2 color=red>File Create Error</font><br>";
             exit;
         }

         // 접근 모드를 707으로 지정
         $chmod = chmod ($datafile, 0707);
         if (!$chmod) {
             echo "<font size=2 color=red>chmod() function Error</font><br>";
             exit;
         }
     }

     // 파일을 오픈한다.
     $fp = fopen($datafile, "r");

     // 파일로부터 카운터 값을 읽어들인다.
     $buffer = fgets($fp, 128);

     // 카운터값을 증가시킨다.
     $buffer++;

     // 파일을 닫는다.
     fclose($fp);

     echo "<center><font size=2 color=blue>";
     echo "당신은 $buffer 번째 방문객입니다.</font><br>";

     // 증가된 카운터값을 저장한다.
     $fp = fopen($datafile, "w");
     fputs($fp, $buffer);
     fclose($fp);
     ?>

    
 
 


  2. 파일-이미지 카운터 만들기
 

 ▣ 파일-이미지 카운터 만들기를 위한 준비 사항

    - 0-9까지의 숫자를 표현하는 이미지 10개를 준비한다.
       0.jpg 1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg 8.jpg 9.jpg

    - images라는 디렉토리를 생성하고 파일들을 이동시킨다.
       mkdir   images
       mv   *.jpg   ./images

▣ 파일-이미지 카운터: imgcounter.html

     <?
     $datafile = "./filecounter.dat";

     // 파일이 존재하는지 확인
     $flag = file_exists($datafile);

     // 만약에 존재하면 파일 접근 모드 확인
     if ($flag) {
         $permission = fileperms($datafile);
         // 접근모드를 8진수 형태로 변형
         $octal = DecOct($permission);

         // 접근 모드가 707로 되어있지 않으면 chmod() 수행
         if ($octal != 100707) {
             $chmod = chmod ($datafile, 0707);
             if (!$chmod) {
                 echo "<font size=2 color=red>chmod() function Error</font><br>";
                 exit;
             }
         }

         // fileperms()함수를 수행하여 캐쉬에 남은 데이타를 삭제
         clearstatcache();

     // 만약에 존재하지 않으면 파일 생성
     } else {
         if (!touch($datafile)) {
             echo "<font size=2 color=red>File Create Error</font><br>";
             exit;
         }

         // 접근 모드를 707으로 지정
         $chmod = chmod ($datafile, 0707);
         if (!$chmod) {
             echo "<font size=2 color=red>chmod() function Error</font><br>";
             exit;
         }
     }

     // 파일을 오픈한다.
     $fp = fopen($datafile, "r");

     // 파일로부터 카운터 값을 읽어들인다.
     $buffer = fgets($fp, 128);

     // 카운터값을 증가시킨다.
     $buffer++;

     // 파일을 닫는다.
     fclose($fp);

     $buffer = strval($buffer);
     echo "<center><font size=2 color=blue>";
     for ($i=0; $i<strlen($buffer); $i++) {
         echo "<img src=./images/".$buffer[$i].".jpg>";
     }
     echo "</font><br>";

     // 증가된 카운터값을 저장한다.
     $fp = fopen($datafile, "w");
     fputs($fp, $buffer);
     fclose($fp);
     ?>

   
 
 


  3. DB-이미지 카운터 만들기
 

 ▣ DB-이미지 카운터 만들기를 위한 준비 사항

    - 카운터를 위한 데이터베이스 생성
       [jskim@ditto chap11]$ mysql -uroot -p mysql
       Enter password:
       Reading table information for completion of table and column names
       You can turn off this feature to get a quicker startup with -A

       Welcome to the MySQL monitor.  Commands end with ; or \g.
       Your MySQL connection id is 266 to server version: 3.22.22

       Type 'help' for help.

       mysql> create database counter;
       Query OK, 1 row affected (0.01 sec)

       mysql> show databases;
       +-------------+
        | Database |
       +-------------+
        | counter    |
        | mysql       |
        | test           |
       +-------------+
       9 rows in set (0.00 sec)

    - 카운터를 위한 테이블 생성
       mysql> use counter;
       Database changed
       mysql> show tables;
       Empty set (0.00 sec)

       mysql> create table counter ( visit int );
       Query OK, 0 rows affected (0.00 sec)

       mysql> show tables;
       +------------------------+
        | Tables in counter |
       +------------------------+
        | counter                  |
       +------------------------+
       1 row in set (0.00 sec)

       mysql> desc counter;
       +-------+---------+------+------+---------+-------+
        | Field | Type    | Null | Key | Default | Extra |
       +-------+---------+------+------+---------+-------+
        | visit  | int(11) | YES  |         | NULL  |            |
       +-------+---------+------+------+---------+-------+
       1 row in set (0.00 sec) 

    - 테이블에 0 저장
       mysql> insert into counter values (0);
       Query OK, 1 row affected (0.00 sec)

       mysql> select * from counter;
       +------+
        | visit |
       +------+
        |   0    |
       +------+
       1 row in set (0.00 sec)

▣ DB-이미지 카운터: dbcounter.html

     <?
     // 데이타베이스 접속
     $link = mysql_connect("localhost", "root", "abc123") 
             or die("Could not connect<br>");

     $select = mysql_select_db ("counter");
     if (!$select) {
         echo "<font size=2 color=red>";
         echo "데이타베이스 선택시 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }
          
     $query = "select * from counter";
     $result = mysql_query($query);
     if (!$result) {
         echo "<font size=2 color=red>";
         echo "질의 수행시 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }
          
     $rows  = mysql_num_rows($result);
     if ($rows!=1) {
         echo "<font size=2 color=red>";
         echo "데이타 검색시에 오류가 발생하였습니다.";
         echo "</font>";
     }

     // 방문 횟수 읽기
     $row = mysql_fetch_row($result);
     $visit = $row[0];
     $visit++;

     $buffer = strval($visit);
     echo "<center><font size=2 color=blue>";
     for ($i=0; $i<strlen($buffer); $i++) {
         echo "<img src=./images/".$buffer[$i].".jpg>";
     }
     echo "</font><br>";

     // 방문 횟수 증가/업데이트
     $updatesql = "update counter set visit = ".$visit;

     $result = mysql_query($updatesql);
     if (!$result) {
         echo "<font size=2 color=red>";
         echo "업데이트 질의 수행시 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }

     mysql_close($link);    
     ?>

   
 
 


  4. 시간대별 접속 통계 산출하기 - 1
 

 ▣ 시간대별 접속 통계를 산출하기 위한 준비 사항

    - 시간대별 접속 통계 저장을 위한 테이블 생성


      [jskim@ditto chap11]$ more access.sql
      create table access (
          datestr     date NOT NULL,
          0h          int DEFAULT '0',
          1h          int DEFAULT '0',
          2h          int DEFAULT '0',
          3h          int DEFAULT '0',
          4h          int DEFAULT '0',
          5h          int DEFAULT '0',
          6h          int DEFAULT '0',
          7h          int DEFAULT '0',
          8h          int DEFAULT '0',
          9h          int DEFAULT '0',
          10h         int DEFAULT '0',
          11h         int DEFAULT '0',
          12h         int DEFAULT '0',
          13h         int DEFAULT '0',
          14h         int DEFAULT '0',
          15h         int DEFAULT '0',
          16h         int DEFAULT '0',
          17h         int DEFAULT '0',
          18h         int DEFAULT '0',
          19h         int DEFAULT '0',
          20h         int DEFAULT '0',
          21h         int DEFAULT '0',
          22h         int DEFAULT '0',
          23h         int DEFAULT '0',
          PRIMARY KEY (datestr)
      );
     [jskim@ditto chap11]$ mysql -uroot -pabc123 counter < access.sql
     [jskim@ditto chap11]$

     [jskim@ditto chap11]$ mysql -uroot -p counter
     Enter password:
     Reading table information for completion of table and column names
     You can turn off this feature to get a quicker startup with -A

     Welcome to the MySQL monitor.  Commands end with ; or \g.
     Your MySQL connection id is 300 to server version: 3.22.22

     Type 'help' for help.

     mysql> show tables;
     +------------------------+
      | Tables in counter |
     +------------------------+
      | access                     |
      | counter                   |
     +------------------------+
     2 rows in set (0.00 sec)

     mysql> desc access;
     +--------+---------+-------+-----+--------------+-------+
      | Field   | Type   | Null  | Key | Default      | Extra |
     +--------+---------+-------+-----+--------------+-------+
      | datestr| date    |           | PRI | 0000-00-00 |          |
      | 0h        | int(11) | YES  |        | 0                  |          |
      | 1h        | int(11) | YES  |        | 0                  |          |
      | 2h        | int(11) | YES  |        | 0                  |          |
      | 3h        | int(11) | YES  |        | 0                  |          |
      | 4h        | int(11) | YES  |        | 0                  |          |
      | 5h        | int(11) | YES  |        | 0                  |          |
      | 6h        | int(11) | YES  |        | 0                  |          |
      | 7h        | int(11) | YES  |        | 0                  |          |
      | 8h        | int(11) | YES  |        | 0                  |          |
      | 9h        | int(11) | YES  |        | 0                  |          |
      | 10h      | int(11) | YES  |        | 0                  |          |
      | 11h      | int(11) | YES  |        | 0                  |          |
      | 12h      | int(11) | YES  |        | 0                  |          |
      | 13h      | int(11) | YES  |        | 0                  |          |
      | 14h      | int(11) | YES  |        | 0                  |          |
      | 15h      | int(11) | YES  |        | 0                  |          |
      | 16h      | int(11) | YES  |        | 0                  |          |
      | 17h      | int(11) | YES  |        | 0                  |          |
      | 18h      | int(11) | YES  |        | 0                  |          |
      | 19h      | int(11) | YES  |        | 0                  |          |
      | 20h      | int(11) | YES  |        | 0                  |          |
      | 21h      | int(11) | YES  |        | 0                  |          |
      | 22h      | int(11) | YES  |        | 0                  |          |
      | 23h      | int(11) | YES  |        | 0                  |          |
     +--------+---------+-------+-----+--------------+-------+
     25 rows in set (0.00 sec)

     mysql>
 
 


  4. 시간대별 접속 통계 산출하기 - 2
 

 ▣ 시간대별 접속 통계를 산출하기: access.html

     [jskim@ditto chap11]$ more access.html
     <?
     // 데이타베이스 접속
     $link = mysql_connect("localhost", "root", "abc123") 
             or die("Could not connect<br>");

     $select = mysql_select_db ("counter");
     if (!$select) {
         echo "<font size=2 color=red>";
         echo "데이타베이스 선택시 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }
          
     $query = "select * from counter";
     $result = mysql_query($query);
     if (!$result) {
         echo "<font size=2 color=red>";
         echo "질의 수행시 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }
          
     $rows  = mysql_num_rows($result);
     if ($rows!=1) {
         echo "<font size=2 color=red>";
         echo "데이타 검색시에 오류가 발생하였습니다.";
         echo "</font>";
     }

     // 방문 횟수 읽기
     $row = mysql_fetch_row($result);
     $visit = $row[0];
     $visit++;

     $buffer = strval($visit);
     echo "<center><font size=2 color=blue>";
     for ($i=0; $i<strlen($buffer); $i++) {
         echo "<img src=./images/".$buffer[$i].".jpg>";
     }
     echo "</font><br>";

     // 방문 횟수 증가/업데이트
     $updatesql = "update counter set visit = ".$visit;

     $result = mysql_query($updatesql);
     if (!$result) {
         echo "<font size=2 color=red>";
         echo "업데이트 질의 수행시 오류가 발생하였습니다.";

         echo "</font>";
         exit;
     }

     // ==================================================
     // 접속 통계 정보 업데이트
     // ==================================================
     $datestr = date("Y-m-d");
     $timeval! = intval(date("g"));

     echo "datestr: $datestr<br>";
     echo "timeval!: $timeval!<br>";

     // 현재 날짜의 접속 통계가 있는지 확인
     $existsql = "select * from access where datestr = '".$datestr."'";
     $result = mysql_query($existsql);
     if (!$result) {
         echo "<font size=2 color=red>";
         echo "접속 통계 select 질의 수행시 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }

     $rows  = mysql_num_rows($result);

     // 만약 현재 날짜의 접속 통계가 없으면 insert 문 사용
     if ($rows==0) {
         $insertsql = "insert into access (datestr, ".$timeval!."h) values ('".
                      $datestr."', 1)";
         $insresult = mysql_query($insertsql);
         if (!$insresult) {
             echo "<font size=2 color=red>";
             echo "접속 통계 insert 질의 수행시 오류가 발생하였습니다.";
             echo "</font>";
             exit;
         }

     // 만약 현재 날짜의 접속 통계가 있으면 update 문 사용
     } else if ($rows==1) {
         // 기존의 접속 통계값 읽기
         $row = mysql_fetch_row($result);
         $accessval = intval($row[$timeval!+1]);

         // 해당 시간대의 접속 통계값 증가
         $accessval++;

         $updatesql = "update access set ".$timeval!."h = ".$accessval.
                      " where datestr = '$datestr'";

         $result = mysql_query($updatesql);
         if (!$result) {
             echo "<font size=2 color=red>";
             echo "접속 통계 select2 질의 수행시 오류가 발생하였습니다.";
             echo "</font>";
             exit;
         }
     } else {
         echo "<font size=2 color=red>";
         echo "접속 통계 데이타에 오류가 발생하였습니다.";
         echo "</font>";
         exit;
     }

     mysql_close($link);    
     ?>

    
 
 


  4. 시간대별 접속 통계 산출하기 - 3
 

 ▣ 시간대별 접속 통계 출력하기: access_print.html

      <?
      // 데이타베이스 접속
      $link = mysql_connect("localhost", "root", "abc123") 
              or die("Could not connect<br>");

      $select = mysql_select_db ("counter");
      if (!$select) {
          echo "<font size=2 color=red>";
          echo "데이타베이스 선택시 오류가 발생하였습니다.";
          echo "</font>";
          exit;
      }
           
      // 현재 날짜의 접속 통계가 있는지 확인
      $selectsql = "select sum(0h), sum(1h), sum(2h), sum(3h), sum(4h), sum(5h), ".
                   " sum(6h), sum(7h), sum(8h), sum(9h), sum(10h), ".
                   " sum(11h), sum(12h), sum(13h), sum(14h), sum(15h), ".
                   " sum(16h), sum(17h), sum(18h), sum(19h), sum(20h), ".
                   " sum(21h), sum(22h), sum(23h) from access";
      $result = mysql_query($selectsql);
      if (!$result) {
          echo "<font size=2 color=red>";
          echo "접속 통계 select 질의 수행시 오류가 발생하였습니다.";
          echo "</font>";
          exit;
      }

      $rows  = mysql_num_rows($result);
      if ($rows!=1) {
          echo "<font size=2 color=red>";
          echo "접속 통계 데이타에 오류가 발생하였습니다.";
          echo "</font>";
          exit;
      }

      // 통계값의 전체합과 최대값을 구한다.
      $row = mysql_fetch_row($result);
      $maxaccess = 0;
      $sumaccess = 0;
      for ($i=0; $i<24; $i++) {
          if ($maxaccess < intval($row[$i])) {
              $maxaccess = intval($row[$i]);
          }
          $sumaccess += intval($row[$i]);
      }

      echo ("
      <center>
      <table border=1 cellspacing=0 width=600>
      <tr>
          <td colspan=2 align=center>
          <font size=4 color=blue><b>
          시간대별 접속 통계 리스트
          </b></font>
          <p align=right><font size=2>
          총 $sumaccess [최대:$maxaccess] 명이 검색되었습니다.
    </font></p>
    </td>
      </tr>
      ");

      for ($i=0; $i<24; $i++) {
          $curaccess = intval($row[$i]);
          $imgwidth = $curaccess/$maxaccess * 500;

          echo "<tr>";
          echo "    <td align=center>";
          echo "    <font size=2>";
          echo "    ".$i."시[".$row[$i]."명]";
          echo "    </font>";
          echo "    </td>";

          echo "    <td width=500>";
          echo "    <img src=./images/graph.gif height=10 width=".$imgwidth.">";
          echo "    </td>";
          echo "</tr>";
      }

      echo "</table>";
      mysql_close($link);    
      ?>


 
 

Total 25
번호 제   목 조회
공지 php 라이브러리 130
25 php 라이브러리 130
24 isset, empty, is_null의 상관 관계와 정보 요약 / define(), de… 1391
23 cookie(쿠키) & session(세션) 4786
22 PHP4 + NuSOAP 4224
21 Java + PHP SOAP 모듈 설치 4744
20 PHP SOAP Extension 6381
19 PHP를 이용한 웹 서비스 개발(3) 3294
18 PHP를 이용한 웹 서비스 개발(2) 3134
17 PHP를 이용한 웹 서비스 개발(1) 3885
16 파일-텍스트 카운터 만들기/파일-이미지 카운터 만들기/DB-이미… 2727
15 간단한 문자열분리,찾기,변환 => explode,substr,strstr,ereg… 7683
14 php 이전 경로를 알아내는 함수 6411
13 php 함수정리 1 5454
12    php 함수정리 all 4200
11 CLASS 3654
10 GD and Image 함수 목록 6242
9 file()관련함수 4052
8 array 배열 함수 목록 4127
7 String 함수 목록 3755
6 each() 3001
 1  2  
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.