File name: visit/visit.wel (4,617 bytes) Text file viewer v1.2
    1 : #!/bin/wel
    2 : 
    3 : /*  visit.wel
    4 : 
    5 :     웹 사이트 방문 기록 프로그램(조영일)
    6 : 
    7 :     Copyright (c) 2000/01/10 by Wesoft
    8 :     All Rights Reserved.
    9 : 
   10 : */
   11 : 
   12 : // 방문자 기록을 하지 않을 network 주소(IP) 일부분을 "" 안에 기록하십시요
   13 : // IP의 일부분만 기록할 경우에는 꼭 '.'으로 끝나도록 하세요
   14 : // 예를 들어 172.168.1.0 부터 172.168.1.255까지는 방문자 기록을 하지 않고자
   15 : // 할경우에는 deny_ip1= "172.168.1.";와 같은 형태로 하는 것이 좋습니다.
   16 : 
   17 : deny_ip1= "192.168.1."; // 자신의 환경에 알맞게 지정해 주세요
   18 : deny_ip2= "";
   19 : deny_ip3= "";
   20 : 
   21 : // 변수 초기값 설정 부분
   22 : 
   23 : host= "";                 // 연결할 mSQL 서버주소
   24 : dbname= "visit";          // 연결할 mSQL 방문기록 데이터 베이스 이름
   25 : stat_table= "stat";       // 연결할 mSQL 통계 데이터 베이스 이름
   26 : LogFile= "log/visit.log"; // log 파일(LogFile=""; 로 하면 log를 남기지 않음)
   27 : if(tablename=="") tablename= dbname; // 방문기록 테이블 이름
   28 : 
   29 : vip = getenv("REMOTE_ADDR");
   30 : vhost = getenv("REMOTE_HOST");
   31 : 
   32 : if(no_out!=1) next_html= "<script>location.href='/index1.html'</script>";
   33 : 
   34 : htmlquery("GET");
   35 : 
   36 : IP_addr= " (" ~ vip ~ ")";
   37 : IP_strlen= len(IP_addr);
   38 : if(IP_strlen<19) IP_addr~= strep(" ", 19 - IP_strlen);
   39 : 
   40 : logwrite=
   41 : {[
   42 :    if(LogFile!="")
   43 :     {
   44 :        logwrite_msg= date(2) ~ "-" ~ time(1) ~ IP_addr ~ msg;
   45 :        system("echo \"" ~ logwrite_msg ~ "\" >> " ~ LogFile);
   46 :     }
   47 : ]}
   48 : 
   49 : deny_len1= len(lrtrim(deny_ip1));
   50 : if(deny_len1==0) vip1= vip; else vip1= left(vip, deny_len1);
   51 : 
   52 : deny_len2= len(lrtrim(deny_ip2));
   53 : if(deny_len2==0) vip2= vip; else vip2= left(vip, deny_len2);
   54 : 
   55 : deny_len3= len(lrtrim(deny_ip3));
   56 : if(deny_len3==0) vip3= vip; else vip3= left(vip, deny_len3);
   57 : 
   58 : // vip==""인 경우는 terminal에서 명령어를 입력하여 실행할때
   59 : if(vip=="" || vip1==deny_ip1 || vip2==deny_ip2 || vip3==deny_ip3)
   60 :  {
   61 :     print(next_html);
   62 :     return;
   63 :  }
   64 : 
   65 : socket= msqlConnect(host);
   66 : if(socket==MSQL_ERR)
   67 :  {
   68 :     print(next_html);
   69 :     msg= "Connect err: host(" ~ host ~ ")";
   70 :     parser(logwrite);
   71 :     return;
   72 :  }
   73 : 
   74 : msg= "mSQL server connected";
   75 : parser(logwrite);
   76 : 
   77 : if(msqlSelectDB(socket, dbname)==MSQL_ERR)
   78 :  {
   79 :     print(next_html);
   80 :     msqlClose(socket);
   81 :     msg= "SelectDB err: dbname(" ~ dbname ~ ")";
   82 :     parser(logwrite);
   83 :     return;
   84 :  }
   85 : 
   86 : vdate = date(0);
   87 : vyear = left(vdate,4);
   88 : vmonth = mid(vdate,5,2);
   89 : vday = right(vdate,2);
   90 : vweek = iweek(vyear,vmonth,vday);
   91 : vtime = time(0);
   92 : vhour = left(vtime,2);
   93 : vminute = mid(vtime,3,2);
   94 : vsecond = right(vtime,2);
   95 : 
   96 : qstr= "insert into " ~ tablename
   97 :     ~ "(ip, host, year, month, day, hour, minute, second, week) "
   98 :     ~ "values('" ~vip  ~ "','"
   99 :                ~vhost  ~ "','"
  100 :                ~vyear  ~ "','"
  101 :                ~vmonth ~ "','"
  102 :                ~vday   ~ "','"
  103 :                ~vhour  ~ "','"
  104 :               ~vminute ~ "','"
  105 :               ~vsecond ~ "','"
  106 :                 ~vweek ~ "')";
  107 : 
  108 : rt= msqlQuery(socket, qstr);
  109 : if(rt==MSQL_ERR)
  110 :  {
  111 :     msg= "Query err: qstr(" ~ qstr ~ ")";
  112 :     parser(logwrite);
  113 :  }
  114 : 
  115 : //////////////////////////// 통계 테이블 누적 //////////////////////////
  116 : 
  117 :   rt= msqlQuery(socket, "select * from " ~ stat_table);
  118 :   if(rt==MSQL_ERR)
  119 :    {
  120 :       msg= "Query err: qstr(" ~ qstr ~ ")";
  121 :       parser(logwrite);
  122 :    }
  123 :   result= msqlStoreResult();
  124 :   fields_count= msqlNumFields(result);
  125 :   rows_count= msqlNumRows(result);
  126 :   if(rows_count<1)
  127 :     {
  128 :        msqlFreeResult(result);
  129 :        msqlClose(socket);
  130 :        msg= "stat table: not exist record";
  131 :        parser(logwrite);
  132 :        print(next_html);
  133 :        return;
  134 :     }
  135 :   row= msqlFetchRow(result);
  136 : 
  137 :   int dcnt[31], hcnt[23], wcnt[6];
  138 :   di= hi= wi= 0;
  139 :   for(j=0; j<fields_count; j++)
  140 :     {
  141 :        field= row[j];
  142 :        if(j<=31) dcnt[di++]= field;
  143 :          else if(j<=55) hcnt[hi++]= field;
  144 :            else if(j<=62) wcnt[wi++]= field;
  145 :              else if(j==63) total= field;
  146 :                else if(j==64) fdate= field;
  147 :     }
  148 :   msqlFreeResult(result);
  149 : 
  150 :   dcnt[vday]++;
  151 :   hcnt[vhour]++;
  152 :   wcnt[vweek]++;
  153 :   total++;
  154 :   ldate= vdate ~ vtime;
  155 :   qstr= "insert into " ~ stat_table ~ " values(";
  156 :   for(i=0; i<=31; i++) qstr~= dcnt[i] ~ ",";
  157 :   for(i=0; i<=23; i++) qstr~= hcnt[i] ~ ",";
  158 :   for(i=0; i<=6; i++) qstr~= wcnt[i] ~ ",";
  159 :   qstr~= total ~ ",'" ~ fdate ~ "','" ~ ldate ~ "')";
  160 : 
  161 :   rt= msqlQuery(socket, "delete from " ~ stat_table ~ " where d0 >= 0");
  162 :   if(rt==MSQL_ERR)
  163 :    {
  164 :       msg= "Query err: qstr(" ~ qstr ~ ")";
  165 :       parser(logwrite);
  166 :    }
  167 :   rt= msqlQuery(socket, qstr);
  168 :   if(rt==MSQL_ERR)
  169 :    {
  170 :       msg= "Query err: qstr(" ~ qstr ~ ")";
  171 :       parser(logwrite);
  172 :    }
  173 : 
  174 : //////////////////////////// 통계 테이블 종료 //////////////////////////
  175 : 
  176 : msqlClose(socket);
  177 : 
  178 : msg= "mSQL server disconnected";
  179 : parser(logwrite);
  180 : 
  181 : print(next_html);
  182 : 
  183 : //////////////////////////// 프로그램 종료 /////////////////////////////
File name: visit/visit.wel (4,617 bytes) Wesoft Corp. ⓒ 2001 All rights reserved.