현재접속자 질문 > 그누3질답

그누3질답

현재접속자 질문 정보

그누보드 현재접속자 질문

본문

안녕하세요

저는 초보 프로그래머 입니다
그누보드의 현재 접속자의 구현 원리를 알고싶습니다.

소스를 분석하라고 대답해주실거 같지만..
저로서는 분석이 힘듬니다.

회원과 손님 구분해서 현재 접속자를 구하는
원리를 좀 자세히 설명해주실수 없나요?

원리를 가르쳐주신다면 직접 만들어보고 싶습니다.

댓글 전체

쪽지로 잘 이해가 안가는 한줄을 질문드렸는대..
쪽지 보낸후에 회원과 비회원 출력을 하는 방법을 생각했습니다..

1. 우선 지금 소스는 접속한사람이면 전부 표시되죠..
2. 그다음 회원테이블에 로그인여부 필드를 하나 추가하고
로그인한 회원의 숫자및 아이디를 구함니다

3. 회원 숫자만큼 전체 회원의 숫자에서 - 를 합니다
4. 뺀값은 손님숫자이고 로그인한 회원의 숫자는 그대로 뿌리고..
로그인 회원의 아이디도 뿌려주면...

회원과 비회원을 정확하게 뿌려줄거같은데
문제는 로그아웃할때 브라우저를 그냥 닫거나 하면
로그인필드의 값을 변경 못해서 로그인 상태로 계속 남아있을수 있을거 같네요

어떻게 하면 좋을까요? ^^;;;;;
zzzz 님 답변 기다릴꼐요 +_+;
적용해보니 잘돌아가더군여 ^-^

저장할때 |아이디
를 추가해서 저장한다음.. 뽑아오면 될거같은데

맨처음 홈페이지 접속했을땐 익명으로 접속되고..
로그인되면 자신의 아이디로 기록이 되어지면
손님으로 접속된것도 타임아웃 시간 전까지는 그대로

로그인한 상태로 되지 않나요? ;;;
흠.. 제가 배열에 약해서....쭉 읽어봤는데 저소스 80프로정도 이해헀네요 ^^;;;

몬가 좋은방법 없을까요?
이 글로 인해 가입을 하셨다니, 축하(?) 드립니다.
부르기도 멋하군요... ;;;
아무튼 ^-^ 님... -_-;;  위 소스를 완벽하게 구사 된다면, 후자는 오히려 쉬울줄로 압니다.
useronline.php 이라는 현재접속자를 찾고,출력하는부분과,
config_file.php 이라는 설정파일과
log.txt 라는 로그를 저장할 파일이 필요하겠죠

<?

$timer = 100; //로그인후에 다음에 체크할 시간을 분으로 표기
$filename = "$DOCUMENT_ROOT/log.txt"; // 이부분은 안봐도 삼천리 로그저장할 파일의 위치를 지정해주시면 되겠죠..

?>

useronline.php 파일 내부입니다.

<?

include ("./config_file.php"); //config_file.php를 불러드린다.

if (!$datei) $datei = dirname(__FILE__)."/$filename";  //$datei값이란 원래 없겠죠.. 값을 지정해줍니다.
$time = @time(); //$time이란 변수에 시간을 넣어주고
$ip = $REMOTE_ADDR; //$ip 변수에는 접속자 ip어드레스를 입력
$string = "$ip|$time\n"; 그담에 $string이란 변수에 아이피|시간 엔터 이런식으로 입력
$a = fopen("$filename", "a+"); //$filename이랑 파일의 맨마지막에 위하게 읽기및 쓰기 모드로 연다
fputs($a, $string); // $a란파일을 변수 $string을 모두 파일에 쓴다. $string 뒤에 길이를 지정해주면 지정한만큼만 쓴다.
fclose($a); // $a란 파일 닫기

$timeout = time()-(60*$timer); //타임아웃시간 지정 ( 현제시간에 $timer값 즉 로그인체크할 인터벌시간(분)를 빼서 지정함)

$all = "";
$i = 0;
$datei = file($filename); $datei변수에 $filename를 배열로 치환한다
for ($num = 0; $num < count($datei); $num++) { //$datei파일내부에 갯수만큼 포문를 돌린다.
$pieces = explode("|",$datei[$num]); // "|"패턴에 따라 배열 $datei[배열값]를 $pieces로 나누어준다.

if ($pieces[1] > $timeout) { //$pieces[0]값은 $ip가 들어있고 $pieces[1]에는 접속시간이 저장되어있으므로 타임아웃인터벌시간과 비교해서
$all .= $pieces[0];        //타임아웃시간를 지나지않는 $pieces[0]값을 $all에 저장해줌..
$all .= ",";              //타임아웃된 ip배열을 ","로 구분되어 적용해줌.
}
$i++;
}

$all = substr($all,0,strlen($all)-1); //변수$all 시작지점0부터 마지막부분-1지점까지 문자열을 반환한다. -1을 하는이유는 알죠? 마지막 입력시에 ,값을 뺴주어야 겠죠
$arraypieces = explode(",",$all); //이제 ","패턴을 사용해서 배열화시켜줍니다.

$useronline = count(array_flip(array_flip($arraypieces))); // $arraypieces값을 숫자로 표현해야하는 이 값은 아이피만 들어있는배열이니까. array_flip함수를 이용해서 같은 아이피로 여러번 접속해도 한명으로 인식하게 해주게 합니다.
echo $useronline; // 온라인에 있는사람 $useronline변수를 출력

// 아래부분은 같은방법으로 다시 해당 변수 $datei를 불러드려서 타임아웃시간이 지나지 않는 값들만..정리
$dell = "";
for ($numm = 0; $numm < count($datei); $numm++) {
$tiles = explode("|",$datei[$numm]);
if ($tiles[1] > $timeout) {
$dell .= "$tiles[0]|$tiles[1]"; //처음에 접속한사람을 log.txt에 정리한것처럼 아이피|접속시간 방식으로 $dell변수에 입력
}
}

if (!$datei) $datei = dirname(__FILE__)."/$filename";
$time = @time();
$ip = $REMOTE_ADDR;
$string = "$dell";
$a = fopen("$filename", "w+"); //$filename를 읽기/쓰기가 가능한방법으로 파일에 맨 처음에 불러드립니다.
fputs($a, $string); //$string 즉, $dell값을 쓰고
fclose($a);  //문닫기^^
?>
전체 9,564
그누3질답 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT