Computer/PHP

PEAR #2 : 간단한 사용법

알찬돌삐 2012. 8. 10. 16:37


PEAR #2 간단한 사용법 시간입니다.

#1에 이어서 진행되는 내용입니다.



PEAR에대해서 한번더 깊히 집고 넘어가겠습니다.

PEAR는 MVC패턴을 구성하는대 한 몫하는 중요 패키지 입니다.

하지만, 국내에서는 잘 사용 안하는듯 하네요.
(개인적인 시각입니다.)

PEAR패키지는 모두 CLASS로 되어있고 패키지중에는 상속받는 패키지가 대다수 입니다
(OLE나 MDB2같이 핵심 패키지는 예외지만요.)

그래서 저는 PEAR패키지와 재가 만든 CLASS들은 Model로 분류하고,

Controller와 View를 구성합니다.

간혹.. Controller에서 중첩되는 코드가 발생하면 Class로 묶어서 Model로 분류하긴 하지만,

보통 PEAR만 Model로써도 부족함이 없습니다.


그럼.. 서론은 이만 줄이고(라고쓰고 '잡담은 이만 줄이고' 라고 읽는다.)

실전 응용에 들어가겠습니다.



1. PEAR사용 요구조건

PEAR사용 요구조건은 확장라이브러리의 include_path입니다.
(#1에서 언급했듯이 패키지를 사용하려면 include해줘야 합니다.)

php.ini에서 include_path나, .htaccess에서 include_path를 정해주어야 합니다.

그럼.. PEAR의 패키지 위치가 어딘지 알아야겠죠?

다시 재미있는 쉘(SSH)로~
(./pear치기 귀찮아서 /usr/bin에다가 심볼릭링크 걸어놨습니다.
거는 방법은 ln -s /usr/local/php/bin/pear /usr/bin/pear
ln -s pear경로 /usr/bin/pear 입니다. )


# pear config-get php_dir
/usr/local/php/lib/php


이렇게 나옵니다.


저는 '/usr/local/php/lib/php'에 PEAR패키지가 설치되어 있군요.


그럼 저 경로를 php.ini의 include_path나


.htaccess에다 추가 시키겠습니다.


저는 .htaccess에다 추가 시키겠습니다.


php_value include_path ".:/usr/local/php/lib/php"


linux에서 경로 구분자는 ':' 콜론(?)입니다.


(windows의 경우에는 ';' 세미콜론이던가..? 아님말고 -_-;;)


php.ini에 적용하셨으면 apache 재시작 해주시고


.htaccess에 적어주셨으면 사용 조건 충족입니다.




2. 사용하기.


드디어 잡설 끝나고 사용할 차례입니다.


일단 사용전에 http://pear.php.net 에서 자신이 사용하려는 패키지에대한 문서를 읽어보시는게


정신건강에 좋습니다.

(참고로 'End-user documentation'을 보시는게 쉽습니다. php.net처럼 나와있습니다.)


여기서는 어재 설치한 DB패키지를 사용해보겠습니다.




소스가 잘 안보이시면

http://dev.eitetu.pe.kr/pear/pear_01.phps

여기 참조




<?php
//DB패키지를 include합니다.
include_once("DB.php");

//dsn을 설정합니다.
$dsn = array(
   
"phptype"=>"mysql",
   
"username"=>"test",
   
"password"=>"test",
   
"hostspec"=>"localhost",
   
"database"=>"test"
);

/*
위와같이 배열로 dsn을 설정할수도 있고

mysql://user@host(/path/to/socket)/pear
와 같이 문자열로 줄수도 있습니다.
*/

//접속 옵션을 설정합니다.
$options = array(
   
"debug"=>2,
   
"portability"=>DB_PORTABILITY_ALL
);

/*
이렇게 하면 접속되고 변수 db에는 Object가 하나 반환됩니다.
php내장함수인 mysql_connect();과는 좀 다르죠?
*/
$db =& DB::connect($dsn, $options);

//접속이 잘 되었는지 체크합니다
if(PEAR::isError($db)){
//애러 Object를 반환하면 프로그램를 끝냅니다.
   
die($db->getMessage());
}



/*
여기서 의문점!!
PEAR::isError();
'이건 DB에 포함되어있는 메소드 인가요?' 라는 질문이 생길수 있다.

PEAR는 보통 PEAR BASE를 기본적으로 바탕에 깔고 패키지를 만듭니다.
DB.php의 소스를 보면 어딘가에 PEAR.php를 include합니다.
*/



/*
테이블 생성 쿼리를 하나 날려보겠습니다.
mysql_query();와 동일하게 쿼리문만 넣어주면 됩니다.
*/

$result1 = $db->query("
CREATE TABLE IF NOT EXISTS T_TEST (
  t_index int(10) unsigned NOT NULL auto_increment,
  t_name varchar(32) NOT NULL,
  t_content varchar(255) NOT NULL,
  PRIMARY KEY  (t_index)
) ENGINE=InnoDB  DEFAULT CHARSET=euckr;
"
);

//역시 애러처리를 해줍니다.
if(PEAR::isError($result1)){
    die(
$result1->getMessage());
}

//그리고 데이터를 insert 해보겠습니다.

for($i=1; $i<5; $i++){
/*
새로운 메소드 입니다.
java의 PreparedStatement와 같은 역할을 합니다.
prepare메소드의 장점은 쿼리문을 config.php와 같은 설정 파일 하나에
모조리 집어넣어놓고 필요할때 호출해서 쓰면 코드가 좀더 간결하고 보기가 좋겠죠?

여기서 '?' <--요 물음표는 java를 하시는분은 아시겠지만,
php에서의 변수 자리입니다.
*/
   
$ps = $db->prepare("INSERT INTO T_TEST (t_name,t_content) VALUES (?,?)");
        if (
PEAR::isError($ps)) {
        die(
$ps->getMessage());
    }

/*
역시 새로운 메소드네요?
execute는 prepare에 들어간 쿼리를 완성시켜서 날리는 역할이라고 보시면 됩니다.
*/
   
$insertData = array("테스트 이름 ".$i,"테스트 내용 ".$i);
   
$rs =& $db->execute($ps, $insertData);
    if (
PEAR::isError($rs)) {
        die(
$rs->getMessage());
    }
}


/*
이번에는 SELECT쿼리입니다.
*/

$data =& $db->getAll(
//prepare과 마찬가지로 변수대신에 '?'를 넣어줍니다
"SELECT * FROM T_TEST WHERE t_index > ?",
//'?'에 들어갈 값을 배열로 순서대로 넣어줍니다.
array(0),
//반환 형태를 정합니다.
DB_FETCHMODE_ASSOC);
if (
PEAR::isError($data)) {
    die(
$data->getMessage());
}

echo
"<pre>";
print_r($data);
echo
"<pre>";

/*
아니!! 이건 내가 만들었던 함수랑 비슷하잖아?!
라고 외치는분들 계실껍니다.
허허허..
*/


/*
마지막으로 Table을 지우겠습니다.
(사실.. 데이터가 많이 쌓이면 서버가 힘들어해서 -_-;;
*/

$result2 = $db->query("DROP TABLE T_TEST;");

//역시 애러처리를 해줍니다.
if(PEAR::isError($result2)){
    die(
$result2->getMessage());
}


/*
그리고 반드시!!!
연결을 끊어줘야 합니다.
안그럼 계속 물고 늘어집니다 -_-;;
(접속 않끊고 mysql죽으면 남탓도 못합니다.)
*/

$db->disconnect();
?>




쉽죠? 다음시간가지 게시판 하나 만들어오세요.

(ㅇㅁㅂ...)



자.. 소스를 보면서 또 한가지 재미있는점이 있습니다.


include한 파일이 php파일이네?


그렇습니다 -_-;;


PEAR별거 없습니다.


그냥 php입니다.


단지 그걸 패키지 형태로 묶어서 관리해주는게 PEAR인것입니다.

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > PHP' 카테고리의 다른 글

base64 규칙  (0) 2012.08.10
세마포어(semaphore)와 공유 메모리(shared memory) 함수  (0) 2012.08.10
PEAR #1 : 패키지 간편설치  (0) 2012.08.10
configure  (0) 2012.08.10
ajax 의 기본구조  (0) 2012.08.10