ip기록
by 세로토닌 | 2008년 7월 15일 01:58
조회 613 댓글 0
php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
tabris6 2005.04.27 03:12
답변 4| 조회 887
$fp = fopen('client_ip_log.txt', 'a+');
fputs($fp, date('m-d, H:i:s', time()).' '.$_SERVER["REMOTE_ADDR"]."\n");
fclose($fp);
이 코드를 index.php에 삽입해서 방문자의 ip log를 남겼습니다.
그런데 로그 기록이 페이지가 갱신될때마다 계속 되는 바람에 주루룩 엄청나게 남네요. -_-
동일 사용자가 일정시간 동안 머물러 있을경우(예를 들어 30분간 사이트에서 이탈해서 다시 접속하기전엔) 갱신해서 기록하지 않는법은 뭐가 있나요?
약간 조사해봐서 쿠키나 세션을 사용하거나...아니면 ip 주소를 체크해서 최근 30분동안 같은 ip에서 접속하면 로그를 안 남기던가 한다고 들었는데
어떻게 하는지 잘 모르겠네요. ;ㅁ;
웹호스팅을 받고 있는 입장이라서 서버자체 셋팅은 힘들고
php파일 설정 변경으로 가능한 방법이 뭐가 있는지 궁금합니다.
추가된 질문 2005.04.27 17:11 추가 우선 ioo님이 써주신대로 해봤는데요,
Parse error: parse error, unexpected '{' in /web/home/chaosj/html/weblog/index.php on line 5
가 뜨더라구요, 그래서 일단 이게 문제인가 싶어서 다른건 문제가 없나 싶어서 중괄호를 삭제해봤는데
그 다음엔
Parse error: parse error, unexpected T_STRING in /web/home/chaosj/html/weblog/index.php on line 7
라고 뜨네요. ;ㅁ;
setcookie("visit",time(),time()+1800,"/");
이 부분에서 뭔가 잘못된거 같기도한데 한시간정도
http://php.new21.com/manual/kr/function.setcookie.php같은곳에도 들어가보면서 이리저리 검색해봤는데 사실 잘 모르겠네요.
rosemana님이 써주신건 그런식으로 되는구나... 라고 이해는 되는거 같은데
어떻게 구문을 작성해야 하는지는 모르겠어요.
제가 지금껏 php쪽에는 문외한이라... -_-;;
아. 그리고 코드는 물론 최상단에 넣었습니다.
index.php파일 <? 바로 다음에요.
신고
의견 1
minajin님의 지식을 나누어주세요!
답변하시면 내공 10점을, 답변이 채택되면 내공 25점을 드립니다.
re: php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
ioo 답변채택률 76.0%
2005.04.27 21:29
질문자인사 이것저것 공부했네요. 감사드립니다.
소스를 아래와 같이 수정하세요.
쿠키 관련 함수가 있기 때문에 파일의 최상단에 삽입하세요.
그렇지 않으면 에러가 생길수도 있습니다.
if(!isset($_COOKIE[visit]))
{
setcookie("visit",time(),time()+1800,"/");
$fp = fopen('client_ip_log.txt', 'a+');
fputs($fp, date('m-d, H:i:s', time()).' '.$_SERVER["REMOTE_ADDR"]."\n");
fclose($fp);
}
설명)
visit 라는 쿠키가 없으면 visit 라는 쿠키를 만들고 로그를 남깁니다.
visit 라는 쿠키는 방문시간으로 부터 1800초(30분) 동안 유효합니다.
time()+1800 을 0 으로 수정하시면 브라우저를 닫을때까지 유효합니다.
추가답변)
추가 내용을 이제야 봤네요.
첫번째 줄을 if(!isset($_COOKIE[visit])) 로 수정해보세요.
신고
의견 쓰기
그 외 답변들 3
받은 추천순 | 최신순
re: php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
비공개 답변채택률 100.0%
2005.04.27 17:28
사용하는 서버 id pw 입력하시고
테이블단위로 프로그램을 짜시는게 가장 명확합니다
그리 길지도 않구요 2 PAGE?!
include "dbconn.php"; //
// counter_main에서 오늘날짜 행이 없으면 추가.
$check=mysql_fetch_array(mysql_query("select count(*) from counter_main where date='$today'",$connect));
if(!$check[0])
{
mysql_query("insert into counter_main (date, unique_counter, pageview) values ('$today', '0', '0')", $connect);
}
// 지금 아이피로 접속한 사람이 오늘 처음 온 사람인지 검사
$check=mysql_fetch_array(mysql_query("select count(*) from counter_ip where date>=$today and date<$tomorrow and ip='$user_ip'",$connect));
// 오늘 처음왔을때
if($check[0]==0)
{
// 전체랑 오늘 카운터 올림
mysql_query("update counter_main set unique_counter=unique_counter+1, pageview=pageview+1 where no=1 or date='$today'", $connect);
// 오늘 시간대별 ip 입력
mysql_query("insert into counter_ip (date, ip) values ('$time','$user_ip')",$connect);
}
// 오늘 한번 이상 온 상태일때
else
{
// 페이지뷰 올림
mysql_query("update counter_main set pageview=pageview+1 where no=1 or date='$today'", $connect);
}
// referer 값 저장
$check2=mysql_fetch_array(mysql_query("select count(*) from counter_referer where date=$today and referer='$referer'",$connect));
if($check2[0]==0)
{
mysql_query("insert into counter_referer (date, referer, hit) values ('$today','$referer','1')", $connect);
}
else
{
mysql_query("update counter_referer set hit=hit+1 where date=$today and referer='$referer'", $connect);
}
사용하는 서버 id pw 입력하시고
테이블단위로 프로그램을 짜시는게 가장 명확합니다
그리 길지도 않구요
텍스트 카운터로 20줄 안쪽으로도 있지만
전 소스보고 참고했습니다
소스는 www.jia-web.net 에 있구요
사진첩소스등 앨범게시판, 카운터
하고 일반 답변형 게시판, 카테고리 분류해서 나눈 게시판등
처음 공부하는 사람이 남긴거 같은데
HTML/JAVASCRIPT/PHP 만들면서 했던 TIP들도 있어서 북마크해두었습니다
원하시면 소스 첨부해드리려고 하는데.
여기 답변은 이미지만 올려져 있네요..압축화일은 올릴수가 없군요.
꼭 해결하시길 바랍니다
출처 : http://www.jia-web.net
신고
의견 쓰기
re: php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
rosemana 답변채택률 77.8%
2005.04.27 10:07
쉽게 생각할 수 있는 방법으로 매번 해당 로그 파일을 분석하는 것입니다.
아니면 파일이 아닌 DB를 사용하는 방식이 되면 편리하죠.
파일 입출력에 대해서 어느 정도 아시는 것 같아 원리만 설명드리면
로그 파일에서 한 줄씩 읽어들여서
$log = explode(" ", $한줄읽은변수);
와 같이 스페이스를 기준으로 시간과 IP로 분리합니다.
for 또는 while 문을 돌면서 IP값, $log[1]과 $REMOTE_ADDR를 비교합니다.
같은 값이 나올 경우 시간, $log[0]과 date("m-d, H:i:s", time() - 60*30)과 비교하면 30분 전이냐 후냐를 알 수 있겠죠.
그리고 IP를 기록할 것이나 말 것이냐를 판단하면 됩니다.
n* 세로토닌님에 의해서 게시물 이동되었습니다 (2008-10-05 13:35)
tabris6 2005.04.27 03:12
답변 4| 조회 887
$fp = fopen('client_ip_log.txt', 'a+');
fputs($fp, date('m-d, H:i:s', time()).' '.$_SERVER["REMOTE_ADDR"]."\n");
fclose($fp);
이 코드를 index.php에 삽입해서 방문자의 ip log를 남겼습니다.
그런데 로그 기록이 페이지가 갱신될때마다 계속 되는 바람에 주루룩 엄청나게 남네요. -_-
동일 사용자가 일정시간 동안 머물러 있을경우(예를 들어 30분간 사이트에서 이탈해서 다시 접속하기전엔) 갱신해서 기록하지 않는법은 뭐가 있나요?
약간 조사해봐서 쿠키나 세션을 사용하거나...아니면 ip 주소를 체크해서 최근 30분동안 같은 ip에서 접속하면 로그를 안 남기던가 한다고 들었는데
어떻게 하는지 잘 모르겠네요. ;ㅁ;
웹호스팅을 받고 있는 입장이라서 서버자체 셋팅은 힘들고
php파일 설정 변경으로 가능한 방법이 뭐가 있는지 궁금합니다.
추가된 질문 2005.04.27 17:11 추가 우선 ioo님이 써주신대로 해봤는데요,
Parse error: parse error, unexpected '{' in /web/home/chaosj/html/weblog/index.php on line 5
가 뜨더라구요, 그래서 일단 이게 문제인가 싶어서 다른건 문제가 없나 싶어서 중괄호를 삭제해봤는데
그 다음엔
Parse error: parse error, unexpected T_STRING in /web/home/chaosj/html/weblog/index.php on line 7
라고 뜨네요. ;ㅁ;
setcookie("visit",time(),time()+1800,"/");
이 부분에서 뭔가 잘못된거 같기도한데 한시간정도
http://php.new21.com/manual/kr/function.setcookie.php같은곳에도 들어가보면서 이리저리 검색해봤는데 사실 잘 모르겠네요.
rosemana님이 써주신건 그런식으로 되는구나... 라고 이해는 되는거 같은데
어떻게 구문을 작성해야 하는지는 모르겠어요.
제가 지금껏 php쪽에는 문외한이라... -_-;;
아. 그리고 코드는 물론 최상단에 넣었습니다.
index.php파일 <? 바로 다음에요.
신고
의견 1
minajin님의 지식을 나누어주세요!
답변하시면 내공 10점을, 답변이 채택되면 내공 25점을 드립니다.
re: php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
ioo 답변채택률 76.0%
2005.04.27 21:29
질문자인사 이것저것 공부했네요. 감사드립니다.
소스를 아래와 같이 수정하세요.
쿠키 관련 함수가 있기 때문에 파일의 최상단에 삽입하세요.
그렇지 않으면 에러가 생길수도 있습니다.
if(!isset($_COOKIE[visit]))
{
setcookie("visit",time(),time()+1800,"/");
$fp = fopen('client_ip_log.txt', 'a+');
fputs($fp, date('m-d, H:i:s', time()).' '.$_SERVER["REMOTE_ADDR"]."\n");
fclose($fp);
}
설명)
visit 라는 쿠키가 없으면 visit 라는 쿠키를 만들고 로그를 남깁니다.
visit 라는 쿠키는 방문시간으로 부터 1800초(30분) 동안 유효합니다.
time()+1800 을 0 으로 수정하시면 브라우저를 닫을때까지 유효합니다.
추가답변)
추가 내용을 이제야 봤네요.
첫번째 줄을 if(!isset($_COOKIE[visit])) 로 수정해보세요.
신고
의견 쓰기
그 외 답변들 3
받은 추천순 | 최신순
re: php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
비공개 답변채택률 100.0%
2005.04.27 17:28
사용하는 서버 id pw 입력하시고
테이블단위로 프로그램을 짜시는게 가장 명확합니다
그리 길지도 않구요 2 PAGE?!
include "dbconn.php"; //
// counter_main에서 오늘날짜 행이 없으면 추가.
$check=mysql_fetch_array(mysql_query("select count(*) from counter_main where date='$today'",$connect));
if(!$check[0])
{
mysql_query("insert into counter_main (date, unique_counter, pageview) values ('$today', '0', '0')", $connect);
}
// 지금 아이피로 접속한 사람이 오늘 처음 온 사람인지 검사
$check=mysql_fetch_array(mysql_query("select count(*) from counter_ip where date>=$today and date<$tomorrow and ip='$user_ip'",$connect));
// 오늘 처음왔을때
if($check[0]==0)
{
// 전체랑 오늘 카운터 올림
mysql_query("update counter_main set unique_counter=unique_counter+1, pageview=pageview+1 where no=1 or date='$today'", $connect);
// 오늘 시간대별 ip 입력
mysql_query("insert into counter_ip (date, ip) values ('$time','$user_ip')",$connect);
}
// 오늘 한번 이상 온 상태일때
else
{
// 페이지뷰 올림
mysql_query("update counter_main set pageview=pageview+1 where no=1 or date='$today'", $connect);
}
// referer 값 저장
$check2=mysql_fetch_array(mysql_query("select count(*) from counter_referer where date=$today and referer='$referer'",$connect));
if($check2[0]==0)
{
mysql_query("insert into counter_referer (date, referer, hit) values ('$today','$referer','1')", $connect);
}
else
{
mysql_query("update counter_referer set hit=hit+1 where date=$today and referer='$referer'", $connect);
}
사용하는 서버 id pw 입력하시고
테이블단위로 프로그램을 짜시는게 가장 명확합니다
그리 길지도 않구요
텍스트 카운터로 20줄 안쪽으로도 있지만
전 소스보고 참고했습니다
소스는 www.jia-web.net 에 있구요
사진첩소스등 앨범게시판, 카운터
하고 일반 답변형 게시판, 카테고리 분류해서 나눈 게시판등
처음 공부하는 사람이 남긴거 같은데
HTML/JAVASCRIPT/PHP 만들면서 했던 TIP들도 있어서 북마크해두었습니다
원하시면 소스 첨부해드리려고 하는데.
여기 답변은 이미지만 올려져 있네요..압축화일은 올릴수가 없군요.
꼭 해결하시길 바랍니다
출처 : http://www.jia-web.net
신고
의견 쓰기
re: php에 대해 잘 아시는분 답변해주세요. ;ㅁ;
rosemana 답변채택률 77.8%
2005.04.27 10:07
쉽게 생각할 수 있는 방법으로 매번 해당 로그 파일을 분석하는 것입니다.
아니면 파일이 아닌 DB를 사용하는 방식이 되면 편리하죠.
파일 입출력에 대해서 어느 정도 아시는 것 같아 원리만 설명드리면
로그 파일에서 한 줄씩 읽어들여서
$log = explode(" ", $한줄읽은변수);
와 같이 스페이스를 기준으로 시간과 IP로 분리합니다.
for 또는 while 문을 돌면서 IP값, $log[1]과 $REMOTE_ADDR를 비교합니다.
같은 값이 나올 경우 시간, $log[0]과 date("m-d, H:i:s", time() - 60*30)과 비교하면 30분 전이냐 후냐를 알 수 있겠죠.
그리고 IP를 기록할 것이나 말 것이냐를 판단하면 됩니다.
n* 세로토닌님에 의해서 게시물 이동되었습니다 (2008-10-05 13:35)
댓글 0
등록된 댓글이 없습니다. 첫 번째 댓글을 남겨보세요.
댓글 남기기