캐시 설정 화면
넷스케이프 4.0
"편집"을 클릭하고, 다음엔 "환경설정", 그 다음엔 "고급"과 "+" 아이콘을 클릭하십시오. 확장된 트리에서 "캐시"를 선택하십시오.
< 넷스 4.0에서의 캐시 설정 화면 >
익스플로러 4.0
"보기"를 클릭하고, "인터넷 옵션..."을 클릭, 다음에는 일반 탭에서 "임시 인터넷 파일"안에 있는 "설정..."을 선택하십시오.
익스플로러 5.0
"도구"를 클릭하고, "인터넷 옵션..."을 클릭, 다음에는 일반 탭에서 "임시 인터넷 파일"안에 있는 "설정..."을 선택하십시오.
< 익스 5.0에서의 캐시 설정 화면 >
캐시 동작 설정
넷스 4.0 익스 5.0 캐시문서와 네트워크에 위치한 문서비교
세션 당 한번 IE를 시작할 때마다 브라우저를 처음 실행시킬 때
단 한번만 문서가 변경되었는지 확인
항상 페이지를 열 때마다 문서를 열때마다 문서가 갱신되었는지 확인
안함 확인하지 않음 캐시된 문서가 있으면 문서 변경에 관계없이
캐시된 문서를 읽어 옴
- 자동으로 ???
캐시된 문서와 네트워크에 위치한 문서 비교는 캐시된 페이지와 사이트의 페이지를 언제 비교할 것인가 지정하는 것으로 "세션 당 한번", "항상", "안함" 중에 선택하게 되는 데 각 설정에 대한 동작은 아래와 같습니다.
세션 당 한번(Once per session)
세션당 한번만 비교합니다. 넷스를 실행한 다음 종료할 때까지 한번만 페이지의 갱신 정보를 점검합니다.
항상(Every Time)
선택하면 페이지를 오픈하는 속도는 저하되지만 페이지를 열 때마다 매번 그 페이지의 갱신 정보를 점검합니다.
안함(Never)
선택하면 페이지의 갱신 정보를 점검하지 않으므로 캐시에 저장된 페이지를 항상 오픈합니다. 이 경우에는 캐시된 문서가 없을 때만 네트워크에 위치한 문서를 읽어오게 됩니다.
웹 검색 중 어느 때라도 갱신된 페이지를 원할 때는 "다시읽기"(넷스) 또는 "새로고침"(익스) 버튼을 누르면 됩니다. 그러면 즉시 갱신 정보를 점검합니다. 이때 만약 페이지가 갱신되어있지 않다면 캐시에 저장된 페이지를 다시 오픈합니다. 그러나 페이지가 갱신되었다면 네트워크 상의 서버로부터 갱신된 페이지를 새롭게 오픈합니다. 시프트 키를 누른 상태에서 다시읽기 버튼을 누르면 무조건 캐시의 내용이 아닌 네트워크상의 서버로부터 페이지를 읽어옵니다
자동으로(익스에서만 설정 가능함)
??????
캐시 저장 디렉토리 및 파일
넷스케이프 4.0
C:\Program Files\Netscape\Users\xxxxxxxx\cache에 캐시 문서를 저장합니다. 디렉토리명의 중간에 있는 xxxxxxxx는 네트워크환경 설정에 기록된 컴퓨터이름이 들어갑니다. 컴퓨터이름을 지정하지 않았다면 default라는 이름이 들어갑니다.
익스플로러 4.0, 5.0
C\windows\Temporary internet files에 캐시 문서를 저장됩니다.
캐시 공간 확보
캐시 공간을 적당히(?) 확보해 놓으면 보다 빠르게 웹검색을 할 수 있습니다. 익스플로러는 디스크 캐시 공간을 사용자가 설정할 수 있는 반면 넷스케이프는 디스크 캐시뿐만 아니라 메모리 캐시 공간도 사용자가 임의 설정할 수 있습니다.
넷스와 익스 모두 캐시 설정 화면에서 캐시 공간 크기를 설정할 수 있습니다. 넷스는 메모리 캐시와 디스크 캐시 크기를 KBytes 단위로 설정할 수 있으며, 익스는 디스크 캐시에 대해서만 MB 단위로 설정할 수 있습니다.
캐시 문서 삭제
동적인 콘텐트를 제공하는 웹사이트를 접속할 때에 브라우저 캐시 동작에 의해 과거의 문서가 브라우저 화면에 나타나서 문제가 발생할 수 있습니다. 이럴 때는 브라우저 캐시를 지워주어야 합니다.
넷스케이프 4.0의 경우에는 위쪽에 있는 캐시 설정 화면에서 "메모리 캐시 삭제" 및 "디스크 캐시 삭제" 버튼을 누르시면 됩니다.
익스플로러 5.0에서는 "도구메뉴 >> 인터넷옵션 >> 일반탭 >> 임시 인터넷 파일"에서 "파일삭제" 버튼을 누르시면 됩니다. 다른 방법으로 내컴퓨터=>C:\windows\Temporary Internet files 디렉토리에서 전체파일을 삭제할 수도 있습니다.
< 익스 5.0에서의 캐시 삭제 >
캐시 동작 중에 수정된 내용을 보려면
때에 따라서는 캐시된 문서가 아닌 새로운 문서를 보아야 할 필요가 있습니다. 이와 같이 캐시가 동작하고 있는 중에 새로운 문서를 보려고 할 때는 다음과 같이 해 보세요.
1. 브라우저의 새로고침(익스) 또는 다시읽기(넷스) 버튼을 누릅니다.
   안되면...
2. shift 버튼을 누른채로 새로고침(익스) 또는 다시읽기(넷스) 버튼을 누릅니다.
   안되면...
3. 캐시 문서를 모두 지운 후 새로고침(익스) 또는 다시읽기(넷스) 버튼을 누릅니다.
   안되면...
4. 웹브라우저를 종료했다가 다시 실행합니다.
   안되면....
5. 컴퓨터를 재부팅한 후 처음부터 다시 해봅니다.
만약에 그래도 안되면... 문서가 변경되지 않은 경우이겠지만 혹시 문서가 변경되었는데도 안된다면 최후 수단으로 컴퓨터 부품을 교환합니다??? (어떤 부품을 갈아야 하는 지는 저도 모름).
캐시 정보 확인
넷스케이프에서는 about이라는 명령을 이용하여 디스크 캐시, 메모리 캐시 및 이미지 캐시 정보를 확인할 수 있습니다.
1. about:cache
2. about:memory-cache
3. about:image-cache
'about:cache'는 디스크에 축적돼 있는 디스크 캐시 상태를 보여줍니다. 'about:memory-cache'는 메모리 캐시 내용을 보여줍니다. 'about:image-cache'는 GIF 또는 JPEG 등의 이미지 정보를 보여줍니다.
< 넷스 4.0에서의 디스크 캐시 정보 >
< 넷스 4.0에서의 메모리 캐시 정보 >
< 넷스 4.0에서의 이미지 캐시 정보 >

Posted by 방글24
브라우저 캐시의 필요성
브라우저 캐시는 클라이언트 시스템에 있는 디스크 또는 메모리를 이용하기 때문에 클라이언트 캐시(client cache)라고도 합니다. 한 번 접속했던 웹 사이트들의 내용을 사용자의 메모리 또는 디스크의 캐시 디렉토리에 일시적으로 저장해 놓았다가 또 다시 같은 사이트에 접속하게 되면 캐시된 문서와 사이트에 위치한 문서를 서로 비교하여 웹 페이지의 내용이 바뀌었을 경우에만 사이트로 직접 가서 내용을 읽어 오고, 바뀌지 않았을 경우에는 캐시된 문서를 읽어서 보여 주게 되므로, 웹 문서를 빠르게 보여줄 수 있습니다.
브라우저 캐시의 종류
캐시 기능에는 메모리 캐시(memory cache)와 디스크 캐시(disc cache)가 있습니다.
메모리 캐시(memory cache)
메모리 캐시는 컴퓨터 내부의 주기억장치인 램의 일정 영역을 브라우저의 캐시 기능으로 할당하는 것으로서, 사용자가 자신의 주메모리의 크기를 고려하여 임의로 설정할 수 있습니다. 단, 이 메모리 캐시 영역에 일시적으로 저장되는 내용은 브라우저를 종료함과 동시에 자동적으로 지워지게 됩니다.
디스크 캐시(disc cache)
디스크 캐시는 브라우저를 종료한 후에도 캐시의 내용을 계속 저장하고 있는데, 그것은 주기억장치가 아닌 보조기억장치인 사용자의 하드디스크 드라이브의 일정 영역에 저장해 놓기 때문입니다. 따라서 브라우저를 다시 시작하더라도 이전에 캐시된 내용을 이용할 수 있기 때문에 빠른 웹검색이 가능합니다.

Posted by 방글24
phpsource/회원인증2001. 1. 12. 14:47
장바구니 클래스 0.0.2(2001.2.20)
  • 쿠커용 추가
  • 장바구니에 상품코드 및 상품색상으로 분류하여 주문할 수 있음
  • 쿠커용 함수 write() 추가
  • put() 함수 대신 set() 함수 사용
장바구니 클래스 0.0.1(최초 공개 버전)
  • PHP4 세션함수 또는 PHP3 세셔너용으로 작성
  • add(), put(), get(), delete() 메소드 제공

'phpsource > 회원인증' 카테고리의 다른 글

{쿠키회원인증}2.쿠키인증 클래스  (0) 2001.02.22
{쿠키회원인증}1.활용  (0) 2001.02.22
{장바구니클래스}2.사용자 함수  (0) 2001.01.12
{장바구니클래스}1.기본 구성  (0) 2001.01.12
{회원별페이지}  (0) 2000.11.21
Posted by 방글24
phpsource/회원인증2001. 1. 12. 14:40
사용자가 접근할 수 있는 메소드는 아래와 같이 5개(write 함수는 쿠커용에서만 사용하며 세셔너용에서는 사용하더라도 아무런 기능을 수행하지 않는 더미함수임)가 제공됩니다. 모든 함수는 기본적으로 상품코드를 가지고 각 상품을 다루게 됩니다. 각 상품에 대한 명칭, 가격 등과 같은 정보는 class.article.php에서 정의되어 있는 상품정보 클래스를 통하여 얻을 수 있습니다.
[code c;gutter:false] void add(strign code, strint color, int num) void set(string code, string color, int value) array get() 또는 array get(string code) 또는 mixed get(string code, string color) void delete([string code [, string color]]) void write(void) [/code]
void add(string code, string color, int num)
add() 함수는 지정된 상품코드, 상품색상의 수량을 증감시킵니다.
[code php;gutter:false] $cart->add("B001", "백색", 1); // "B001" 백색 상품의 주문수량을 1 증가시킴 $cart->add("B001", "청색", -1); // "B001" 청색 상품의 주문수량을 1 감소시킴 [/code]
void set(string code, string color, int num)
0.0.2 버전부터 put() 함수명 대신에 set() 함수명으로 접근할 수 있습니다. 이 함수는 지정된 상품코드, 상품색상에 따른 주문수량을 지정된 값으로 설정합니다. 주문수량 num 값은 0 이상의 값으로 지정하여야 합니다.
[code php;gutter:false] $cart->set("B001", "청색", 1); // "B001" 청색 상품의 주문수량을 1개로 설정함 $cart->set("B002", "흑색", 3); // "B002" 흑색 상품의 주문수량을 3개로 설정함 [/code]
array get()
매개변수를 지정하지 않으면 장바구니 배열 전체를 되돌려줍니다.
[code php;gutter:false] $cartlist = $cart->get(); if (is_array($cartlist)) { while(list($code,$v)=each($cartlist)) { while(list($color,$num)=each($v)0 { echo "$code($color)의 주문수량은 $num 개입니다.\n"; } } } [/code]
array get(string code)
매개변수로 상품코드를 지정하면 해당하는 상품코드에 대한 상품정보를 배열로 되돌려줍니다.
[code php;gutter:false] $a001 = $cart->get("A001"); if (is_array($a001)) { while(list($color,$num)=each($a001)) echo "AOO1-$color=$num\n"; } [/code]
int get(string code, string color)
지정딘 상품코드, 상품색상에 대한 주문수량을 되돌려 줍니다.
[code php;gutter:false] $nums = $cart->get("A001", "백색"); // "A001" 백색 상품의 주문수량을 되돌려줌 [/code]
void delete([string code [, string color]])
매개변수로 상품코드와 상품색상을 지정하면 해당 주문수량을 삭제합니다. 매개변수로 상품코드만 지정하면 장바구니에 저장된 해당하는 상품코드의 전체 정보를 삭제합니다. 매개변수를 지정하지 않으면 장바구니 정보 전체를 모두 삭제합니다.
[code php;gutter:false] $cart->delete("A001", "청색"); // 장바구니에서 "A001" 청색 상품의 정보를 삭제함 $cart->delete("A001"); // 장바구니에서 상품코드 "A001"의 정보를 삭제함 $cart->delete(); // 현재 사용하고 있는 장바구니를 삭제함 [/code]
void write(void)
장바구니에 저장된 상품정보를 클라이언트에 있는 쿠키파일에 저장합니다. 이 함수는 내부적으로 PHP header() 함수를 사용하기 때문에 브라우저로 출력하는 문자가 발생하기 전에 수행하여야 합니다. 이 함수는 쿠커용에서만 정상적으로 사용될 수 있는 함수입니다. 그러나 세셔너용에서 사용하더라도 아무런 문제가 생기지는 않습니다. 세셔너용에서는 어떠한 기능도 들어있지 않은 더미함수로 정의되어 있습니다. 자세한 것은 쿠커(Cooker) 정보를 참조바랍니다.
[code php;gutter:false] <?php require("./cooker/class.cooker.php"); // 쿠커 require("./cart/class.carter4cooker.php"); // 쿠커용 장바구니 클래스 require("./cart/class.article.php"); // 상품정보 클래스 $cart = new Carter; $article = new Article; switch($count) { case "add" : $cart->add($code, $color, 1); break; case "dec" : $cart->add($code, $color, -1); break; case "del" : $cart->delete($code, $color); break; default : $cart->set($code, $color, $count); } $cartlist = $cart->get(); $cart->write(); // 쿠커용에서는 여기에서 장바구니 정보를 쿠키파일에 저장함 ?> . . 브라우저 화면에 출력할 코드를 생성할 부분 . [/code]

'phpsource > 회원인증' 카테고리의 다른 글

{쿠키회원인증}1.활용  (0) 2001.02.22
{장바구니클래스}3.다운로드  (0) 2001.01.12
{장바구니클래스}1.기본 구성  (0) 2001.01.12
{회원별페이지}  (0) 2000.11.21
{회원인증에 대하여}10.전체 구성  (0) 2000.10.10
Posted by 방글24
phpsource/회원인증2001. 1. 12. 14:34
세션함수(또는 세셔너) 및 쿠커를 이용하여 장바구니를 구현하였습니다.
PHP3에서 세션함수를 이용하기 위해서는 제가 공개한 세셔너-0.2.4을 문서상단에 포함하여 주세요. PHP4에서 사용할 때는 세셔너함수를 포함시키면 안됩니다.
쿠커(Cooker)용 장바구니에서는 PHP3와 PHP4에 관계없이 제가 공개한 쿠커-0.0.1을 문서상단에 포함하여 주세요.
장바구니 클래스 및 샘플 코드는 Tip&Tech&Download 게시판에 파일로 올려놓았습니다.
파일 구성
세셔너용
lib.sessioner.php - PHP3에서 세션함수를 사용하기 위한 라이브러리
class.carter4sessioner.php - 세셔너용 장바구니 클래스
class.article.php - 상품정보를 관리해주는 클래스
shopping.php3 - 쇼핑을 위한 쇼윈도우 샘플
cart.php3 - 장바구니를 보여주는 페이지 샘플
PHP4에서는 sessioner.php 파일이 필요없으며 cart.php3 및 shopping.php3 상단에 있는 세셔너 함수를 인클루드하는 부분을 삭제합니다.
[code php;gutter:false] require("./sessioner/lib.sessioner.php"); //<- PHP4에서는 삭제할 것 require("./cart/class.carter4sessioner.php"); require("./cart/class.article.php"); [/code]
쿠커용
class.cooker.php - 쿠커(Cooker; 쿠키정보 클래스)
class.carter4cooker.php - 쿠커용 장바구니 클래스
class.article.php - 상품정보를 관리해주는 클래스
shopping.php3 - 쇼핑을 위한 쇼윈도우 샘플
cart.php3 - 장바구니를 보여주는 페이지 샘플
쿠커를 사용하기 위해서는 PHP 버전에 관계없이 항상 문서 상단에 포함시켜야 합니다. class.article.php, cart.php3 및 shopping.php3 파일은 세셔너용과 동일합니다.
[code php;gutter:false] require("./cooker/class.cooker.php"); //<- PHP3, PHP4 모두에서 필요 require("./cart/class.carter4cooker.php"); require("./cart/class.article.php"); [/code]
장바구니 구조
장바구니는 세션함수를 이용하여 주문자가 주문처리하거나 로그아웃할 때까지 서버에 저장하도록 합니다.
ver 0.0.1
배열형태로 구성되었으며, 상품코드를 인덱스키로 하고, 주문수량이 값으로 저장되어 있습니다.
[code php;gutter:false] $Cart["A001"] = 4; // 상품코드 "A001"의 주문수량은 4개임 $Cart["A002"] = 2; // 상품코드 "A002"의 주문수량은 2개임 $Cart["B001"] = 3; // 상품코드 "B001"의 주문수량은 3개임 [/code]
ver 0.0.2
상품코드 및 상품색상에 의하여 분류할 수 있도록 2차원 배열로 구성되어 있습니다.
[code php;gutter:false] $CartData[상품코드][색상코드] = 주문수량 $CartData["A001"]["흰색"] = 4; // "A001" 흰색 상품의 주문수량은 4개임 $CartData["A002"]["갈색"] = 5; // "A002" 갈색 상품의 주문수량은 5개임 [/code]
장바구니 클래스(ver 0.0.2)
장바구니는 class.carter4sessioner.php(세셔너용), class.carter4cooker.php(쿠커용) 파일에서 클래스 Carter로 작성되어 있습니다. 생성자 매개변수로 장바구니로 이용할 세션변수명 또는 쿠키명을 지정할 수 있습니다. 생략하면 "PHP_CARTER_DATA"라는 이름을 사용합니다.
[code php;gutter:false] $cart = new Carter; // 장바구니 세션변수명 또는 쿠키명 = "PHP_CARTER_DATA" $cart = new Carter("mycart"); // 장바구니 세션변수명 또는 쿠키명 = "mycart" [/code]
쇼윈도우 화면
진열된 상품을 볼 수 있으며 이 화면에서 필요한 상품을 필요한 수량만큼 구매할 수 있습니다.
< 쇼윈도우 페이지 >
장바구니 보기 화면
쇼윈도에서 주문한 상품 리스트를 볼 수 있습니다. 이 화면 내에서 주문수량을 하나씩 추가하거나 줄일 수 있으며 필요없는 상품은 삭제할 수도 있습니다.
< 장바구니 보기 페이지 >

Posted by 방글24
애플리케이셔너 0.0.2(2001.5.30)
  • register(), unregister() 메소드를 삭제하였으며 따라서 lock(), unlock() 메소드 만으로 방문자공용변수를 제어합니다.
  • 애플리케이셔너 배열 변수 $APPL_VARS[]를 삭제하였습니다.
  • 실행속도 향상을 위해 객체 생성시 모든 방문자공용변수를 복원하던 것을 수정하여 해당 페이지에서 사용하는 변수값만 복원합니다.
애플리케이셔너 0.0.1(2000.11.21-최초 공개 버전)
  • 애플리케이셔너는 모든 방문자가 공용으로 사용할 수 있는 변수(방문자공용변수)를 사용할 수 있도록 제작된 라이브러리로, ASP의 애플리케이션 객체와 같은 역할을 합니다.

Posted by 방글24
생성자
방문자공용변수가 저장되는 장소(디렉토리 또는 디비 테이블명)를 변경할 필요가 없으면 아래와 같이 입력인자 없이 객체를 생성합니다.
[code php;gutter:false] $appl = new Applicationer;
.
.
. [/code]
파일시스템용에서 저장되는 디렉토리를 변경하려면 아래와 같이 생성자의 입력인자인 배열의 요소 "resource"에 디렉토리명을 지정하십시요.
[code php;gutter:false] require("./class.applfile.php");

$argv["resource"] = "새로운 디렉토리명";
$appl = new Applicationer($argv);
.
.
. [/code]
데이터베이스용에서 저장되는 테이블을 변경하려면 아래와 같이 생성자의 입력인자인 배열의 요소 "resource"에 테이블명을 지정하십시요.
[code php;gutter:false] require("./class.applbase.php");

$argv["resource"] = "새로운 테이블명";
$appl = new Applicationer($argv);
.
.
. [/code]
사용자 메소드
bool lock(string varlist | array varlist);
lock() 메소드에 전달되는 방문자공용변수 중에 아직 등록되지 않은 변수가 있으면 lock() 메소드 내부에서 자동적으로 등록시켜 줍니다. 반대로 방문자공용변수에 할당된 값이 null이면 등록을 취소(해당 변수에 대한 모든 정보를 삭제함)합니다. 이 함수의 역할은 다른 방문자가 지정된 변수를 조작할 수 없도록 막아줍니다. lock() 메소드로 지정된 방문자공용변수는 오직 lock() 시킨 문서에서만 그 값을 수정할 수 있습니다. 다른 방문자(다른 웹문서)에서 해당 변수를 사용할 수 있도록 하기 위해서는 unlock() 메소드로 풀어주어야 합니다.
[code php;gutter:false] $appl->lock("counter");

if (!$appl->counter)
$appl->counter = 100; // 100부터 카운팅 시작

$appl->counter++;

$appl->unlock("counter"); [/code]
복수의 방문자공용변수를 lock, unlock 하려면 배열을 이용하여 전달합니다.
[code php;gutter:false] $appl->lock(array("counter", "stock"));
.
.
.
$appl->unlock(array("counter", "stock")); [/code]
bool unlock(string varlist | array varlist);
다른 방문자가 lock() 으로 지정된 변수를 조작할 수 있도록 하기 위해 lock를 풀어주는 메소드입니다. 만약 unlock에서 지정된 변수의 값이 빈문자열이면 더 이상 필요없는 변수라고 판단하여 파일 또는 디비에 등록되어 있는 변수를 완전히 삭제시켜 줍니다.
사용 예제
첨부된 사용예제(파일명 test.php3)는 세션함수를 이용하기 때문에 만약 PHP3에서 실험하기위해서는 제가 공개한 세셔너를 추가로 다운로드 받아 같은 디렉토리에 복사하여야 합니다. 그리고 디비용 애플리케이셔너를 실험하기 위해서는 미니디비 0.2.2p1 버전이 필요하니 이것도 필요하면 다운로드하여 같은 디렉토리에 복사하여야 합니다.

Posted by 방글24
애플리케이셔너 개요
MS의 ASP에서 사용되는 Application 객체에서와 같이 웹애플리케이션에서 모든 방문자가 데이터를 공유할 수 있는 변수를 등록하여 사용할 수 있도록 해 줍니다. 방문자공용변수와 동일한 기능을 수행하는 것이지만, 사용자 인터페이스가 매우 간결해졌기 때문에 방문자공용변수보다 사용하기가 훨씬 편합니다.
애플리케이셔너란?
애플리케이셔너(Applicationer)는 PHP3 & PHP4에서 동작되는 클래스로 작성된 방문자공용변수를 사용할 수 있도록 제작된 툴로 ASP의 애플리케이션 객체와 같은 역할을 합니다.
저장 매체
애플리케이셔너에서 지원하는 저장 매체는 파일시스템과 데이터베이스이고, 파일시스템과 데이터베이스 모두를 동일한 인터페이스로 사용할 수 있도록 작성되어 있습니다. 따라서 향후 동일한 코드로 저장 매체만 변경할 경우 애플리케이셔너 파일을 인클루드하는 부분만 변경하면 됩니다.
< 애플리케이셔너의 구성 >
애플리케이셔너의 파일 구성
애플리케이셔너는 저장매체에 따라 별도로 작성되어 있습니다. 파일시스템을 위해 개발된 class.applfile.php와 데이터베이스를 위해 개발된 class.applbase.php가 있습니다. class.applbase.php의 경우는 별도로 DB Layer인 MiniDB가 필요합니다.
저장 매체 파일명
파일시스템 class.applfile.php
데이터베이스 class.applbase.php
파일시스템용 애플리케이셔너
파일시스템을 이용한 애플리케이셔너는 디폴트로 /tmp 디렉토리에 파일로 저장할 수 있습니다. "/tmp"는 웹서버 상에 공유하는 임시 디렉토리이므로, 하나의 서버로 여러 명이 사용하는 경우, 예를 들면 직접 웹서버를 운영하는 것이 아니고 웹호스팅 서비스를 받는 경우에는 아래와 같이 생성자를 통하여 이 디렉토리를 자신의 웹사이트에서만 접근할 수 있는 디렉토리로 변경할 필요가 있습니다.
[code php;gutter:false] <?php

require("./class.applfile.php");

$argv["resource"] = "/home/httpd/phpclass/applicationer";
$appl = new Applicationer($argv);
.
.
. [/code]
위에서 지정된 디렉토리 내에 방문자공용변수에 대한 정보가 기록되어 있는 파일들이 저장됩니다. 각 변수마다 별도의 파일에 그 정보가 기록 유지됩니다. 결국 애플리케이셔너 디렉토리에는 현재 웹사이트에서 사용되고 있는 방문자공용변수의 수량만큼의 파일이 존재합니다. 이 파일명은 "appl_$varname"입니다. 여기서 $varname은 방문자공용변수명을 나타냅니다.
복수의 방문자가 동일한 방문자공용변수를 사용할 때 발생할 지도 모르는 변수값의 불확실성을 해결하기 위해 "appl_$varname" 파일에 대한 locking 및 unlocking이 필요하며, 이러한 locking 및 unlocking 역할을 할 파일이 또 하나 필요합니다. 이 파일명은 "appllock_$varname"입니다. 애플리케이셔너 디렉토리에 해당변수에 대한 lock 파일이 없으면 unlocking 상태이고, lock 파일이 있으면 locking 상태입니다.
데이터베이스용 애플리케이셔너
데이터베이스용의 경우(파일명:class.applbase.php)에는 내부적으로 미니디비를 이용하기 때문에 애플리케이셔너 객체를 생성하기에 앞서 미니디비 객체를 생성하여야 합니다.
[code php;gutter:false] <?php

require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php"); // 애플리케이셔너(디비용) 0.0.2

$base = new MiniDB(
"디비 호스트명",
"사용자 id",
"디비 패스워드",
"디비명",
"접속방식"
);
$appl = new Applicationer;
.
.
. [/code]
데이터베이스를 이용하는 애플리케이셔너는 여러가지 데이터베이스를 다루기 위해 내부적으로 공개된 DB 레이어인 미니디비를 사용하기 때문에 미니디비에서 지원되는 데이터베이스를 애플리케이셔너에서도 그대로 사용할 수 있습니다. 미니디비에 대해서는 미니디비 메뉴를 참조하세요. 현재(2001.6)까지 MiniDB에서 지원되는 데이터베이스로는 MySQL, 오라클, 포스트그레스, 사이베이스, MSQL, MSSQL, Informix가 있습니다.
데이터베이스용 애플리케이셔너에서 사용하는 디비 테이블명은 "Applicationer"입니다. 만약 이 테이블명을 변경하려면 아래와 같이 생성자의 입력인자로 테이블명을 지정하여 줍니다.
[code php;gutter:false] <?php

require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php");

$argv["resource"] = "새로운 테이블명";
$appl = new Applicationer($argv);
.
.
. [/code]
데이터베이스용 애플리케이셔너에서의 locking 및 unlocking
아래에 있는 애플리케이셔너의 테이블 구조(MySQL용)를 보면 알 수 있지만, 현재 방문자공용변수를 사용 중인지 아닌지를 나타낼 수 있는 필드 islock가 준비되어 있습니다. 이 필드에 "0"이 기록되어 있으면 현재 필드를 어떠한 방문자도 사용하고 있지 않는 상태이므로 현재 필드에 해당하는 방문자공용변수를 자유롭게 읽고 쓸 수 있습니다. 그러나 이 필드에 "1"이 기록되어 있으면 누군가 현재 필드를 사용하고 있는 상태를 나타내므로 이 때는 이 필드에 기록되어 있는 방문자공용변수를 다룰 수 없습니다.
[code sql;gutter:false] CREATE TABLE Applicationer (
id varchar(255) not null PRIMARY KEY,
value text not null,
islock SET("0","1") not null DEFAULT "0",
lastused int(8)
); [/code]
대기 시간(Waiting Time)
만약 다른 방문자가 임의의 방문자공용변수를 다루기 위해 lock 파일을 생성하거나 또는 islock 필드에 "1"이 기록한다면 또 다른 방문자의 스크립트는 대기 상태에 들어가게 됩니다. 최대 대기 시간은 5초로 설정되어 있으며, 이 대기 시간 내에 현재 방문자공용변수를 사용하고 있는 스크립트가 사용을 끝내고 lock 파일을 삭제하거나 또는 islock 필드에 "0"으로 설정한 후 종료하게 됩니다. 그러면 대기 상태에 있던 또 다른 스크립트가 해당하는 방문자공용변수를 사용할 수 있게 됩니다. 5초로 설정된 최대 대기 시간은 비상시를 대비하여 설정된 시간이며, 접속하는 방문자가 많다고 하더라도 대부분의 경우에는 수(십) 밀리세컨드 이내에 제어권을 되돌려 받게 될 것입니다. 최대 대기 시간이 지나도록 lock 파일이 존재하거나 또는 islock 필드의 값이 계속 "1"인 경우에는 강제로 lock 파일을 삭제하거나 islock 필드의 값을 "0"으로 재설정한 후 해당하는 방문자공용변수를 다룰 수 있게 해 줍니다. 애플리세이셔너가 이러한 알고리즘을 이용하기 때문에, 전부 또는 전무를 요구하는 트랙잭션 처리로 얻어지는 100% 신뢰성있는 데이터를 제공하지는 않습니다. 100% 신뢰성있는 데이터를 얻기를 원한다면 소스코드를 수정하여 데이터베이스에서 제공하는 트랙잭션 기능을 이용하여야 할 것 입니다.

Posted by 방글24
세셔너와 애플리케이셔너의 공통점
세셔너와 애플리케이셔너 모두 웹애플리케이션 전체에 사용되는 변수를 등록하여 다룰 수 있게 해줍니다.
변수의 사용범위(scope)
방문자를 기준으로 하여 변수의 사용범위를 구분하게 되면, 세셔너는 특정 방문자에게만 적용되는 변수를 다룰 수 있도록 해 주지만, 애플리케이셔너는 모든 방문자가 공유하여 읽고 쓸 수 있는 변수(방문자공용변수)를 등록하여 다룰 수 있도록 해 줍니다. 방문자공용변수로 사용될 수 있는 대표적인 예로는 카운터를 들 수가 있습니다. 방문자가 웹사이트에 접속할 때마다 카운터도 하나씩 증가하게 됩니다.

Posted by 방글24
방문자공용변수 라이브러리와 애플리케이셔너의 공통점
방문자공용변수 라이브러리와 애플리케이셔너 모두 MS의 ASP에서 사용되는 Application 객체에서와 같이 웹애플리케이션에서 모든 방문자가 공유하게 되는 변수(즉, 방문자공용변수)를 사용할 수 있게 해 줍니다.
변수의 사용범위(scope)
방문자공용변수 라이브러리에서는 변수를 pageglobal, pagemember, pagestatic 키워드를 사용하여 페이지 단위로 사용범위(scope)를 지정할 수 있도록 작성되어 있지만, 애플리케이셔너에서는 변수의 사용범위를 페이지 단위로 지정할 수 없으며 그 사용범위가 모든 페이지에 걸쳐있게 됩니다. 이는 마치 방문자공용변수 라이브러리에서 변수를 pageglobal로 설정한 것과 같습니다.
변수의 정보 은폐(information hiding)
편리함을 생각한다면 애플리케이셔너가 우수하겠지만 정보 은폐라는 측면에서 보면 방문자공용변수 라이브러리가 훨씬 뛰어나다고 할 수 있습니다. 예를 들면, 방문자공용변수 라이브러리에서는 동일한 이름의 변수명을 가지고 복수의 페이지에서 서로 다른 의미로 사용할 수 있으나, 애플리케이셔너에서는 이것이 불가능하지요. 개발자가 알아서 각 페이지에서 사용하고 있는 애플리케이션 변수명에 대하여 유지 관리할 책임이 따르게 됩니다.

Posted by 방글24