주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
연길시 신화서점 조선말 도서

복습하는 페이지 - 접속경로 기록하기

광수 | 2001.10.17 00:30:55 댓글: 0 조회: 597 추천: 13
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758813
▶ 복습하는 페이지 - 접속경로 기록하기

안녕하세요? ^-^ 모처럼 올려보는 강의입니다.

보통 홈페이지에 보면 카운터가 하나씩은 있습니다. 요즘 카운터가 많이 좋아져 오늘
접속자 뿐만 아니라, 전체, 어제, 최고 등의 수치까지 표현해주며, 접속경로까지
보여주기도 합니다.

이번 강의에서 파일 처리의 복습 차원에서 접속 경로를 기록하는 프로그램을
다뤄보도록 하겠습니다.

먼저 간단한 과정을 알아야겠죠?

1. 접속 경로를 구한다.
2. 접속 경로가 없을 경우 다른 문자열로 지정한다.
3. 파일 내에 접속 경로(또는 위의 다른 문자열)를 찾아
3-1. 있을 경우 카운트 값을 1 증가
3-2. 없을 경우 새로운 값을 추가한다.

순서는 간단히 정해봤고, 실제 프로그램을 작성해봐야겠죠?


▷ 파일명 : referer.php
================================================================================
<?

function update ($filename, $value) { // 사용자 함수 선언 (인자값은 파일명과 값)
  $fp = fopen($filename,"r+"); // 파일을 읽기,쓰기 모드로 오픈
  fseek($fp,0); // 파일의 포인터를 제일 처음으로 이동
  $temp = fread($fp,filesize($filename)); // 파일의 크기만큼 임시 변수에 읽어옴
  $position = strpos($temp,$value); // 해당 변수에서 넘겨받은 값의 위치 찾기
  if($position) { // 만약 일치하는 값을 발견했다면
    fseek($fp,$position-11); // 해당 위치에서 11 바이트 앞으로 포인터 이동
    $temp_count = fread($fp,10)+1; // 현재 포인터 위치에서 10 바이트 읽어 1 더함
    fseek($fp,$position-11); // 해당 위치에서 11 바이트 앞으로 포인터 이동
    fwrite($fp,sprintf("%10d",$temp_count)); // 10바이트 새로운 값 기록
  } else { // 만약 일치하는 값을 발견하지 못했다면
    fseek($fp,filesize($filename)); // 파일의 포인터를 마지막으로 이동
    fwrite($fp,"          1 $value<br>n"); // 카운트값과 현재 값을 파일에 기록
  }
  fclose($fp); // 파일 닫기
}

$con_refer = $HTTP_SERVER_VARS["HTTP_REFERER"]; // 접속 경로 구함
if (!$con_refer) $con_refer = "Bookmark or Typing Moving"; // 접속 경로 없을시
update("referer.cgi",$con_refer); // 업데이트!

?>
================================================================================

먼저 사용자 함수는 건너뛰고 $con_refer 변수에 이전 접속 경로를 가져옵니다.
만약 이전 접속 경로가 없다면 Bookmark or Typing Moving이라는 문자열 값으로
지정한 뒤에 사용자 함수를 호출합니다.

사용자 함수에서 파일명과 값을 인자로 받는데 먼저 파일을 읽기 쓰기 모드로 열어
파일의 모든 내용을 읽어들입니다.

그 다음 이 내용 중에 넘겨받은 값 즉 접속 경로값이 있는지 찾아봅니다.

만약 접속 경로값이 있다면 해당 위치로 포인터를 이동합니다. 여기서 잠깐! 파일에
기록되는 형태를 지정해야 하는데 위 프로그램에서 보이듯 10칸 카운터 값, 한칸
공백, 그 다음 접속 경로값과 HTML 태그와 ESC 코드(다음줄) 형식으로 했습니다.

_________1_$value<br>n
==========-======----==

해당 값을 찾았다면 이 위치에서 11바이트 앞으로 이동해 10바이트를 읽습니다.
카운트 값이 기록되어있으니까요. 그 다음 이 값에 1을 더한 다음 그 위치에 다시
이 값을 기록하는 것이죠.

만약 위치값을 찾지 못했다면 위의 형식처럼 새로운 값을 기록하구요.

순서를 차근차근 생각해보면 쉽습니다. ^^; 반복적으로 보다 보면 이해가 될거에요.
아! 그냥 보기만 하면 안되고 직접 작성도 해봐야겠죠?


referer.cgi 파일은 아무 내용도 없어도 됩니다. 빈 파일을 하나 만들어
referer.php 파일이 있는 곳에 올린 다음 퍼미션을 777로 변경만 해두면 됩니다.
그래야 새로운 내용이 기록될테니까요. referer.cgi 파일은 빈 파일입니다~ 빈 파일~.


자. 그럼 이제 마지막으로 이 기록된 내용을 보는 프로그램이 하나 있어야겠죠?


▷ 파일명 : view.php
================================================================================
<?
$fp = fopen("referer.cgi","r"); // 파일을 읽기 모드로 오픈
$data = fread($fp,filesize("referer.cgi")); // 파일의 크기만큼 읽음
fclose($fp); // 파일 닫기

echo "<pre>▷ 접속 경로 (횟수,주소)
$data</pre>"; // HTML 출력
?>
================================================================================

HTML은 꾸미기 나름이겠죠? (주소에 링크를 자동으로 건다거나, 색상 알록달록하게.)


실제 이 프로그램을 사용하려면 홈페이지에서 가장 먼저 읽히는 문서 파일의 제일
처음에 <? include "referer.php"; ?>를 삽입해둬야 합니다. 예를 들면 일반적으로
많이 쓰이는 index.html 파일이 되겠죠? 프레임 나뉜 경우 프레임셋 파일의 제일
상단인 것은 두말할 나위도 없겠죠?


▷ 파일명 : index.html
================================================================================
<? include "referer.php"; ?>
<html>
<head>
<title>::: BiHon's DreamPHP.com :::</title>
</head>
<body bgcolor=white text=black>
안녕하세요? ^-^ 어서오세요~ 반갑습니다~
</body>
</html>
================================================================================
<? include "referer.php"; ?>
<html>
<head>
<title>::: BiHon's DreamPHP.com :::</title>
</head>
<frameset cols="80,100" border="0">
    <frame src="test.html" noresize scrolling="no" name="left">
    :
    <noframes>
    :
</frameset>
:
================================================================================


방문 경로를 보려면 언제든 http://주소/view.php 하면 되구요. ^-^ 어때요?


오늘의 포인트? 프로그램을 작성할 경우 순서를 먼저 생각하고, 이 순서에 맞게
프로그램을 작성하는게 좋다~입니다.

위 소스 중의 일부는 앞으로의 파일 프로그래밍 과정 중에 자주 등장할 것 같죠?
경우에 따라 굉장히 효과적으로 쓸 수 있거든요. ^^;

그럼 즐거운 하루 되세요~ ^^;


▷ 미리보기 : http://dreamphp.com/study2/referer/referer.php
▷ 소스보기 : http://dreamphp.com/study2/referer/referer.phps

▷ 미리보기 : http://dreamphp.com/study2/referer/view.php
▷ 소스보기 : http://dreamphp.com/study2/referer/view.phps

▷ 예제문서 : http://dreamphp.com/study2/referer
▷ 예제소스 : http://dreamphp.com/study2/referer/index.phps

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (13) 선물 (0명)
IP: ♡.149.♡.65
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11844
관리자
2003-09-20
11394
관리자
2003-09-20
20521
지구인
2010-08-27
19325
지구인
2009-09-07
13647
SOLIDH
2010-01-29
15600
엔죠라이프
2004-10-07
16701
광수
2001-10-17
424
광수
2001-10-17
575
광수
2001-10-17
718
광수
2001-10-17
371
광수
2001-10-17
445
광수
2001-10-17
709
광수
2001-10-17
591
광수
2001-10-17
564
광수
2001-10-17
597
광수
2001-10-17
502
광수
2001-10-17
622
광수
2001-10-17
832
광수
2001-10-17
792
광수
2001-10-17
627
광수
2001-10-17
785
광수
2001-10-17
449
광수
2001-10-17
508
광수
2001-10-17
445
광수
2001-10-17
656
광수
2001-10-17
508
광수
2001-10-17
732
모이자 모바일