[PHP] OCI8을 사용하여 오라클 DB 접근하기

OCI8을 사용하여 오라클 DB 접근하기

여기서는 PHP, httpd, OCI8을 연동하여 PHP에서 Oracle DB에 접근하는 방법을 설명한다.

PHP의 OCI8 함수는 Oracle Call Interface (OCI )를 사용하여 오라클 데이터베이스에 접근할 수 있도록 한다.

 

예제에 사용한 패키지 버전

PHP : 5.2.5

httpd : 2.2.8

Oracle Instant Client : 10.1.0.5

 

1) httpd를 컴파일하여 설치한다.

$ cd /zero/build/httpd-2.2.8

found_dbm=0 ./configure \

--prefix=/zero/env/httpd-2.2.8 \

--enable-so \

--enable-headers \

--enable-auth \

--enable-deflate \

--disable-negotiation \

--disable-include \

--disable-autoindex \

--disable-asis \

--enable-cgid \

--disable-alias \

--disable-actions

make; make install

 

 

2) Oracle 홈페이지에서 OS 환경에 맞는 Oracle Instant Client Package - Basic과 SDK를 다운 받아 설치하고자 하는 디렉토리에 압축을 푼다. 

(http://www.oracle.com/technology/tech/oci/instantclient/index.html)

$ cp instantclient-basic-linuxAMD64-10.1.0.5.0-20060519.zip  instantclient-sdk-linuxAMD64-10.1.0.5.0-20060519.zip  /zero/env/$ $ cd /zero/env/

$ unzip instantclient-basic-linuxAMD64-10.1.0.5.0-20060519.zip instantclient-sdk-linuxAMD64-10.1.0.5.0-20060519.zip

 

 

3) libclntsh.so.10.1 파일에 대한 심볼릭 링크를 생성해 준다(링크를 생성하지 않으면 PHP 컴파일 도중 에러가 발생한다.)

$ cd /zero/env/instantclient10_1

$ ln -s libclntsh.so.10.1 libclntsh.so

 

 

4) PHP를 컴파일하여 설치한다. 이 때 OCI8 관련 configure 옵션을 지정한다.

$ cd /zero/build/php-5.2.5

./configure --prefix=/zero/env/php-5.2.5 \

--with-apxs2=/zero/env/httpd/bin/apxs \

--with-iconv \

--with-oci8=instantclient,/zero/env/instantclient10_1 \

--enable-sockets \

--with-zlib \

--with-config-file-path=/zero/bin \

--enable-mbstring

make; make install

 

 

5) TNS_ADMIN 디렉토리를 생성한 후, 오라클 접속을 위한 tnsnames.ora 파일을 작성하여 저장한다.

$ mkdir /zero/TNS_ADMIN

$ vi /zero/TNS_ADMIN/tnsnames.ora

 

tnsnames.ora 파일 예)

ORA_SERVER=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.254.0.5)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ORA92)
    )
)

 

 

 

6) 오라클 환경변수를 다음과 같이 설정한 후, httpd를 실행한다.

export TNS_ADMIN=/zero/TNS_ADMIN   (tnsnames.ora 파일을 저장한 디렉토리)

export NLS_LANG=KOREAN_KOREA.UTF8         (접속하고자 하는 오라클 데이터베이스의 인코딩 설정에 따라)  

 

 

7) httpd의 Document 디렉토리에 다음과 같은 PHP 테스트 페이지를 작성한 후, 브라우저에서 접속해 본다.

<?

phpinfo();

?>

 

OCI8 설정이 enabled되어 있는지 확인한다. 만약 아래와 같은 항목이 없다면 제대로 설치가 되지 않은 것이므로 위 설치 과정을 다시 점검한다.

 

php_oci2.jpg

 

 

8) 다음과 같은 코드를 작성하여 오라클 접속 및 쿼리 테스트를 한다. 이 때 한글이 깨진다면 NLS_LANG 환경변수 설정이 맞는지 확인해 본다.

 

<?
  $conn 
oci_connect('user''pass''ORA_SERVER'); // 인자는 오라클 아이디, 비밀번호, tnsnames.ora에 정의된 오라클 인스턴스 이름
  if (!
$conn) {$e oci_error();

    print htmlentities($e['message']);
    exit;
  }
$query 'SELECT * FROM DEPARTMENTS';$stid oci_parse($conn$query);
  if (!
$stid) {$e oci_error($conn);
    print 
htmlentities($e['message']);
    exit;
  }
$r oci_execute($stidOCI_DEFAULT);
  if (!
$r) {$e oci_error($stid);
    echo 
htmlentities($e['message']);
    exit;
  }


  print '<table border="1">';
  while (
$row oci_fetch_array($stidOCI_RETURN_NULLS)) {
    print 
'<tr>';
       foreach (
$row as $item) {
         print 
'<td>'.($item?htmlentities($item):'&nbsp;').'</td>';
       }
       print 
'</tr>';
  }
  print 
'</table>';oci_close($conn);

?>

 

 

참고 사이트

http://www.oracle.com/technology/global/kr/pub/notes/technote_php_instant.html

http://www.php.net/manual/en/book.oci8.php

 

 

 

 

 

 

 

 

 

 

 

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