구슬이네 IT & Media / IT 와 미디어를 바라봅니다



출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=1776

 

PHPLIB 강좌 1

작성자 : 나종성 konlo@geonji.co.kr , http://dev.geonji.co.kr/~konlo

1 시작하기

웹 페이지를 PHP로 개발하던 중 마소 11월 호에 PHPLIB를 보게 되었습니다. 한 참 사용자의 관리 때문에 골 머리를 썩고 있었는데, 마침 PHPLIB에 페이지 관리 기능을 보고 잡지 책과 홈페이지 (http://phplib.netuse.de)의 매뉴얼을 보고 PHPLIB을 분석하게 되었습니다.

라이브러리를 만든 이의 그 심오한 뜻(?)은 잘 알지 못하지만 그나마 분석하여 사용할 수 있을 정도의 분석을 해보았습니다.  그간 도움만 받았던 Internet 사용자들에게 이제 조금이나마 도움을 드리고자 합니다. ^^:

일단 설명은 php를 아시는 분, 그리고 기타 Unix, Linux 등의 서버 명령어들을 아시고 계신 분, DB를 사용 관리하실 줄 아시는 분으로 설명하겠습니다. ^^: 시작은 역시 설치부터 시작하여 설치 후 PHPLIB가 제대로 동작하는가를 살펴 보겠습니다. 기본 구성의 PHPLIB의 매뉴얼 순서대로 가며 제가 필요하다고 생각하여 공부한 내용들만 다루겠습니다. (사실 영어도 딸리고 아직 전부를 안다고는 할 수 없으니...^^:)

2 설치 하기

2-1 소스 받기

    PHPLIB의 홈페이지인 http://phplib.netuse.de 에 가셔서 download페이지에 가시면 phplib-7.2c.tar.gz을 받으실 수 있습니다. 무척이나 쉽죠 ? ^^:

2-2 설치 하기

    여기서 부터는 일단 PHPLIB에 나와 있는 매뉴얼의 단계에 따라서 인스톨을 해 보겠습니다. 원래 매뉴얼이라는 것이 한 번 읽어보면 영~~ 감이 오지 않더군요 ..(머리가 나빠서인가 ?? -_-;;) 일단 매뉴얼의 단계를 보지요. 매뉴얼 보시면 step1 ~ step10까지 설치 과정이 있는데 별로 어렵지는 않았는데 처음에는 왜 이렇게 헤맸는지 (역시 머리가 나빠서 ? -_-++) 제가 혹시라도 해석을 잘 못 할 수도 있으니 원문과 함께 부가 설명을 하는 것이 좋을 듯 하군요 . 그리고 편의를 위하여 가상 드렉토리를 만들지요.

   현재 제 홈디렉토리는 /home/konlo 그리고 웹서버는 /home/konlo/httpd 그리고 document root는 /home/konlo/httpd/htdocs/ 입니다.

Step 1

Create an include directory named php parallel to your web servers document root directory. Do not put the include directory below your web servers document root.

document root directory와 나란하게 php라는 디렉토리를 만들라고 했습니다. 제가 해석을 맞게 한 것인지는 모르겠지만 이 부분은 어는 곳에다가 설치해도 관계가 없을 것 같군요. 나중에 include_path만 설치된 지정해주면 되니깐요. 그래도 혹시 모르니...

ex) 현재 디렉토리 /home/konlo/httpd

/home/konlo/httpd> mkdir php <- 일단 디렉토리를 만듭니다. 그럼 다음과 같은 드렉토리가 생기겠죠? /home/konlo/http/php

Step 2

Unpack your PHPLIB distribution. Move the contents of the php distribution directory into the php directory you just created.

PHPLIB의 압축을 풀고 php의 내용을 생성된 php디렉토리로 이동시키라고 했습니다. 파일 압축을 풀고 tar를 풀면 파일 이름과 같은 디렉토리가 하나 생성 됩니다. 그 안으로 들어가시면 php 라는 디렉토리가 있는데 이것을 전 단계에서 만들었던 php 디렉토리에 복사를 합니다.

ex)

사실 압축은 어디에다 풀어도 관계 없구요  저는 그냥 홈디렉토리에서 압축을 풀겠습니다.

/home/konlo>gzip -d phplib-7.2c.tar.gz <- 이렇게 하면 압축이 풀리면서 phplib-7.2c.tar와 같은 파일로 변합니다.

/home/konlo>tar -xvf phplib-7.2c.tar  <-이렇게 하면 tar를 풀리면서 파일명과 같은 디렉토리가 생성됩니다. 그럼 한 번 들어가보죠

/home/konlo>cd phplib-7.2c <- 파일명에서 tar를 빠지고요... ^^:

/home/konlo/phplib-7.2c> ls <- 보시면 php라는 디렉토리가 있습니다.

CHANGES  COMMIT  COPYING  CREDITS  HELP  Makefile  README  TODO  VERSION  doc/  pages/  php/  stuff/  unsup/

이제 이 php의 디렉토리에 있는 내용들을 아까 만들었던 디렉토리에 복사를 합니다.

/home/konlo/phplib-7.2c>cp php/* /home/konlo/httpd/php

이렇게 하면 php내용들이 새로 만든 드렉토리에 복사되겠죠?

Step 3

Get to the php3.ini file for your web servers PHP interpreter and update the include_path statement so that it points to that php directory. Update the auto_prepend_file statement so that it points to the prepend.php3 file in that include directory.

If you do not have control over your php3.ini file, you did not read the VERY IMPORTANT NOTE above.

여기에서 php3.ini 파일이 나왔는데 PHPLIB가 php3를 가지고 만들어서 그런 것 같구요. 파일 이름은 별로 신경 쓰시지 마시고 일단 모르시는 분들을 위해서 php.ini 파일에 대해서 간단하게 설명드리면  php의 환경을 저장하고 있는 화일로 기타 여러가지 설정을 할 수 있는 파일입니다. 위의 문장에서는 include_path를 지정하여 php(새로 만들었던)디렉토리를 지정하라구했구요 ..그리고 auto_prepend_file를 prepend.php3로 지정하도록했습니다.

php.ini 파일은 보통 /usr/local/lib 에 넣고 사용하는데요 phpinfo()함수를 호출하여 보면 첫 번째 테이블에 Configuration file (php.ini) path 라는 항목이 있으니 이곳에 php.ini파일을 놓고 고치시면 됩니다. 설정 변경은 다른 방법이 있는 것이 아니라 vi 또는 기타 편집기를 이용하여 include_path와 auto_prepend에 각각 값을 넣어주면 됩니다. 설정 이름에서 알 수 있듯이 include_path는 include될 파일의 위치를 지정하는 것이고 auto_prepend는 pre-라는 접두사에서 알 수 있듯이 처음에 미리 시작되는 코드를 지정하는 것입니다. 즉 각각의 페이지가 열릴 때마다 미리 파일에서 열려서 그 내용을 페이지가 사용하는 겁니다. 대표적으로 여기서는 관련 class를 포함합니다.

위의 값들을 각각 다음과 같이 설정합니다.

include_path    = ".:/home/konlo/httpd/php"

auto_prepend_file       = "prepend.php3";

include_path에서 잘 보시면 ':' 이 부분이 보일 것입니다. 이것은 include_path를 두 개 이상 지정할 때 사용합니다.(소스를 직접 보시면 아시겠지만 Unix 는 delimiter는 콜론(:), Window는 세미콜론(;)을 사용합니다.) 그러니깐 위와 같이 설정하면 include될 파일의 위치가 현재 디렉토리와 /home/konlo/httpd/php가 된다는 이야기입니다. 그리고 prepend.php3가 페이지마다 읽혀지게 되는 것입니다.

Step 4

Also check that track_vars are enabled and that you have enabled magic_quotes_gpc. While you are at it, you might want to check sendmail_path, if you plan to send mail from your application. It has to be set to /usr/lib/sendmail -t on most UNIX systems to work.

If you do not have control over your php3.ini file, you did not read the VERY IMPORTANT NOTE above.

step 3과 같이 php.ini 파일을 변경하는 부분입니다. php3.ini or php.ini 화일에서 track_vars와 magic_quotes_gpc를 On으로 변경합니다. 그리고 sendmail에 대한 설명이 나와있는데 이것은그냥 놔두셔도 괜찮을 것 같군요. 혹시 모르니 관계되는 분은 잘 살펴보시길..

ex)

magic_quotes_gpc        =       On

track_vars                      =       On

Step 5

cd into the php include directory. Edit local.inc. In class DB_Example supply the appropriate parameters for your database connection.

여기서는 DB를 위해서 설정하는 부분입니다.새로 생성된 php디렉토리로 이동하셔서 local.inc 파일을 DB에 접근할 수 있도록 DB_Example의 내용을 편집합니다. 다른 것이 아니라 MySql에 연결할 수 있도록 host, Database, User, Password 값을 입력하는 것입니다. 참고로 local.ini 파일은 기본적인 class을 상속받아서 개인들의 구미에 맞게 변경할 수 있도록 상속된 클래스들이 모여 있습니다. default로 XXX_Example로 되어 있는 것들입니다. 그중에서 DB에 관련된 DB_Example의 클래스 메버 변수들을 수정하는 겁니다.

ex)

host가 local 호스트이고 DB가 Homepage 그리고 사용자가 root , root의 패스워드가 123a라면 다음과 같이 입력하면 됩니다.

class DB_Example extends DB_Sql {   var $Host     = "localhost";   var $Database = "Homepage";   var $User     = "root";   var $Password = "123a"; }

Step 6

For this database, run create_database.mysql from the distribution to create active_sessions and auth_user. auth_user will be populated with a sample user named kris with a password test.

phplib리는 기본적으로 세션 관리를 db를 통해서 하게 됨으로 DB가 필수입니다. PHPLIB가 데이터를 저장할 수 있는 table들을 만들어줘야하는데 기본적으로 active_session, active_session_split,  auth_user, auth_user_md5, db_sequence를 만들게 됩니다. 그리고 기본적으로 사용할 수 있는 사용자로 kris라는 user와 test라는 password를 제공합니다. 이작업은 아주 편하게도 다 스크립트로 만들어 놨습니다. 그냥 우리는 좀 복잡한 명령어(?) 한 줄이면 필요한 table과 데이터를 생성할 수 있습니다. 실행 스크립트는 처음에 압축을 푼 디렉토리를 보면 stuff라는 디렉토리가 있습니다. 그 디렉토리에 가보시면 각 DB만다 스크립트가 있는데 저는 MySql를 사용 함으로  create_database.mysql를 사용하겠습니다. 대충 create_database.mysql 파일을 열어보시면 아시겠지만 방금 말씀드렸던 table에 대한 스키마가 있습니다. 그리고 가장 상단에 사용 법이 다음과 같이 나와 있습니다.

mysql -h host database_name < 이렇게요   <->

여기에 사용자가 있다면 -u 옵셥. 그리고 패스워드가 있으면 -p 옵션을 같이 사용해도 문제 없겠군요 .

위와 같은 명령어를 실행시키면 table이 생성되게 됩니다. 물론 mysql daemon이 떠있어야 하구요 (그냥 위와 같이 실행하라고만 말씀드렸는데 mysql실행할 때의 경로와 create_database.mysql의 path도 신경을 써주셔야 합니다. )

ex) 혹시 하는 마음에 예를 보여드리지요

저는 mysql이 /home/konlo/mysql 에 설치되어 있구요 mysql이라는 파일은 ./bin있습니다. 그러니 다음과 같이 하면 됩니다.

/home/konlo/mysql/bin>mysql -u root -p homepage < /home/konlo/phplib-7.2c/stuff/create_database.mysql

이렇게요

Step 7

Move the contents of the pages directory and all its subdirectories into your document root directory.

이부분은 설정과는 관계가 없는데요 phplib가 제대로 설치가 되었는지 보기 위해서 예제페이지를 만들어 놓은 것입니다. 압축 푼 디렉토리에 보시면 pages라는 디렉토리가 있습니다. 이것을 document root directory로 이동하라고 했습니다. 그러니깐 pages의 위치는 다음과 같이 됩니다. 복사도 좋고 이동도 좋습니다.

/home/konlo/httpd/htdocs/pages

Step 8

Access the "/" URL of your web server with cookies enabled. If no index.html is present, index.php3 will be displayed. If you reload that page, the number shown must increment. Access your database with the mysql command client and select * from active_sessions. Check that there is a single session record for your browser and see how the text in val changes when you reload the page and select * from active_sessions again. If this works, the session class is functional with cookie mode.

여기서부터는 설치가 잘 되었는지를 보기 위한 단계입니다. 브라우저에서 테스트를 위해 만들었던 pages의 내용을 테스트하는 단계입니다. 저같은 경우는 http://dev.geonji.co.kr:9080/pages/index.php3 으로 브라우저에서 보면 실행 화면을 볼 수 있습니다. 위의 내용은 페이지를 reload할 때마다 그 데이터 값이 증가되어야한다는 이야기를 하고 있습니다.(나중에 나오겠지만 session 데이터여서 같은 세션에서는 계속해서 데이터 값이 증가합니다. )

Step 9

Now access showoff.php3. Try to login as kris, password test. Check active_sessions again. You now should have a Example_Session entry (see the name column) and a Example_User entry in your table. Both should increment on reload.

여기서는 showoff.php3에서 kris/test 로 로그인 할 수 있다는 이야기를 하고 있습니다. 그리고 그곳에서도 데이터 값이 증가해야한 다는 이야기를 하고 있습니다.

Step 10

Try again with cookies disabled. You should get a new session (the cookie is lost) and you should be able to see your session id as the get parameter part of your URL.

여기서는 cookie를 disable 시키면 세션 아이디를 URL의 파라미터로 볼 수 있을 것이라는 이야기를 하고 있습니다. 제가 해보지는 않았지만 다음과 같은 파라미터를 볼 수 있을 것입니다. Example_Session=SID(세션 아이디 좀 복잡한 숫자와문자의 조합을 되어있지요)

여기까지 매뉴얼의 설치 과정을 한 번 살펴 보았는데 ... 잘 따라해보셨는지 모르겠더군요 . ^^: 아~ 그리고 여기서 한가지 설치가 제대로 되었다고 하더라고 step 8의 페이지 데이터 증가가 cache 때문에 잘 증가 되지 않더군요. 실제로 값이 증가가 되었는데도 캐쉬 때문에 값이 증가되지 않는 것처럼 보입니다. 제가 처음에는 잘 못 설치된 줄 알았는데 좀 찾아보니 그것이 아니더군요. 캐쉬에 대한 설정하는 멤버 변수가 있는데 이부분을 수정하면 됩니다. 어려운 것은 아니구요 ^^:

아까 local.inc (새로 만들었던 php 디렉토리에 )에 상속 받은 Example_Session 클래스를 보시면 멤버 변수 중에 var $allowcache 라는 것이 있습니다. 이것을 "no"로 설정해주시면 됩니다.

var $allowcache = "no";

이렇게 하면 reload를 할 때마다 데이터 값이 잘 증가하는 것을 볼 수 있을 것입니다.

초보 시절 (지금도 반 초보지만 ^^:) 뭣 좀 해보려고 해도 설치가 안 되어서 시작도 못해보는 경우가 많았는데 여기저기 도움을 받아서 겨우겨우 했던 기억이 나는군요. 어떻게 큰 도움이 되지는 못하더라도 조금이나마 설치에 도움을 줬으면 합니다.

혹시 이해가 잘 안 되시거나 잘 못 된 부분 있으면 다음으로 연락주십시오~ konlo@geonji.co.kr

다음에는 마소지에 실린 내용과 매뉴얼 그리고 제가 소스를 분석한 내용을 가지고 사용법(특히 default 사용자에 대한..참 괜찮은 것 같아요 ^^:)에 대해서 다시 한 번 강좌(?)를 올리도록 하지요. 그리고 더욱 관심 있으신 분은 마소 11월호 12월호 를 참고 하십시오. 1월 호에서는 template에 대해서 연재된다고 합니다. 소스코드와 디자인의 분리라는 측면에서 참 많이 관심이 갑니다. 아시는 분은 아시겠지만 참으로 두 개가 꼬여서 여간 번거롭지가 않습니다. 기회가 되다면 이것도 한 번 정리를 해보죠 ~~ ^^: 벌써 2001년 새해가 밝았습니다. 모든 희망하시는 일 잘 되기를 기원합니다. ~~ 그럼 이만 꾸벅

ps: 혹시라도 제 글이 다른 곳에 올려질 때는 연락이라도 좀 주십시오~~ 큭큭 ..^^: