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 : //////////////////////////// 프로그램 종료 /////////////////////////////¶
|