Serotonin Paper

세로토닌의 생각 조각들과 기록들 (2007 - 2012)

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)

댓글 0

등록된 댓글이 없습니다. 첫 번째 댓글을 남겨보세요.

댓글 남기기