문서유형ㅣ기술정보
분야ㅣ인터페이스/연동
적용제품버전ㅣ T5
문서번호ㅣTIITI061
개요
PHP 와 tbOCI 설치 및 연동 하는 방법을 기술합니다. (PHP – tbOCI 연동 가이드)
방법
1. PHP 계정 생성
[root@public data]# useradd -d /data/php -g dba php
[root@public data]# passwd php
Changing password for user php.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@public data]# su - php
[php@public ~]$ pwd
/data/php
2. 파일 업로드
1. sdk-10.2.0.5.0-linux-x64.zip : Oracle oci.h
2. basic-10.2.0.5.0-linux-x64.zip : Oracle library
3. oci8-2.0.8.tar : oci
4. php-5.6.11.tar.gz : php 설치 파일
5. tibero 바이너리 : Tibero Client 설치 파일* 오라클 클라이언트 파일은 아래 링크를 통해 다운로드
https://www.oracle.com/kr/database/technologies/instant-client/linux-x86-64-downloads.html
* php 파일은 아래 링크를 통해 다운로드
http://kr1.php.net/downloads.php
* OCI8 은 아래 링크를 통해 다운로드
http://pecl.php.net/package/oci8
public@php:/data/php $ ls -tlr
합계 335324
-rw-r--r-- 1 php dba 603960 3월 9 16:21 sdk-10.2.0.5.0-linux-x64.zip
-rw-r--r-- 1 php dba 36840810 3월 9 16:21 basic-10.2.0.5.0-linux-x64.zip
-rw-r--r-- 1 php dba 1608704 3월 9 16:21 oci8-2.0.8.tar
-rw-r--r-- 1 php dba 18319185 3월 9 16:21 php-5.6.11.tar.gz
-rw-r--r-- 1 php dba 285988869 3월 9 16:22 tibero5-bin-FS02-~~.tar.gz
3. php 설치
public@php:/data/php $ gzip -dc php-5.6.11.tar.gz | tar xvf –
php-5.6.11/
php-5.6.11/php.ini-production
php-5.6.11/.gdbinit
php-5.6.11/Makefile.gcov
… 생략…
php-5.6.11/pear/Makefile.frag
php-5.6.11/README.SUBMITTING_PATCH
public@php:/data/php $ cd php-5.6.11/
public@php:/data/php/php-5.6.11 $ ./configure --prefix=$HOME/php5
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
…생략…
Thank you for using PHP.
config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
public@php:/data/php/php-5.6.11 $
public@php:/data/php/php-5.6.11 $ make
/bin/sh /data/php/php-5.6.11/libtool --silent --preserve-dup-deps --mode=compile cc -Iext/opcache/ -I/data/php/php-5.6.11/ext/opcache/ -DPHP_ATOM_INC -I/data/php/php-5.6.11/include -I/data/php/php-5.6.11/main -I/data/php/php-5.6.11 -I/data/php/php-5.6.11/ext/date/lib -I/data/php/php-5.6.11/ext/ereg/regex -I/usr/include/libxml2 -I/data/php/php-5.6.11/ext/sqlite3/libsqlite -I/data/php/php-5.6.11/TSRM -I/data/php/php-5.6.11/Zend -I/usr/include -g -O2 -fvisibility=hidden -c /data/php/php-5.6.11/ext/opcache/ZendAccelerator.c -o ext/opcache/ZendAccelerator.lo
…생략…
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
clicommand.inc
directorytreeiterator.inc
invertedregexiterator.inc
directorygraphiterator.inc
pharcommand.inc
phar.inc
Build complete.
Don't forget to run 'make test'.
public@php:/data/php/php-5.6.11 $
public@php:/data/php/php-5.6.11 $ make install
Installing shared extensions: /data/php/php5/lib/php/extensions/no-debug-non-zts-20131226/
Installing PHP CLI binary: /data/php/php5/bin/
Installing PHP CLI man page: /data/php/php5/php/man/man1/
Installing PHP CGI binary: /data/php/php5/bin/
Installing PHP CGI man page: /data/php/php5/php/man/man1/
Installing build environment: /data/php/php5/lib/php/build/
Installing header files: /data/php/php5/include/php/
Installing helper programs: /data/php/php5/bin/
program: phpize
program: php-config
Installing man pages: /data/php/php5/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /data/php/php5/lib/php/
[PEAR] Archive_Tar - installed: 1.3.12
[PEAR] Console_Getopt - installed: 1.3.1
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util - installed: 1.2.3
[PEAR] PEAR - installed: 1.9.5
Wrote PEAR system config file at: /data/php/php5/etc/pear.conf
You may want to add: /data/php/php5/lib/php to your php.ini include_path
/data/php/php-5.6.11/build/shtool install -c ext/phar/phar.phar /data/php/php5/bin
ln -s -f phar.phar /data/php/php5/bin/phar
Installing PDO headers: /data/php/php5/include/php/ext/pdo/
public@php:/data/php/php-5.6.11 $
4. Oracle InstantClient 설치 (basic, sdk) 및 환경변수 추가
public@php:/data/php $ unzip sdk-10.2.0.5.0-linux-x64.zip
Archive: sdk-10.2.0.5.0-linux-x64.zip
creating: instantclient_10_2/sdk/
creating: instantclient_10_2/sdk/include/
inflating: instantclient_10_2/sdk/include/occi.h
inflating: instantclient_10_2/sdk/include/occiCommon.h
inflating: instantclient_10_2/sdk/include/occiControl.h
inflating: instantclient_10_2/sdk/include/occiData.h
inflating: instantclient_10_2/sdk/include/occiObjects.h
inflating: instantclient_10_2/sdk/include/occiAQ.h
inflating: instantclient_10_2/sdk/include/oci.h
inflating: instantclient_10_2/sdk/include/oci1.h
inflating: instantclient_10_2/sdk/include/oci8dp.h
inflating: instantclient_10_2/sdk/include/ociap.h
inflating: instantclient_10_2/sdk/include/ociapr.h
inflating: instantclient_10_2/sdk/include/ocidef.h
inflating: instantclient_10_2/sdk/include/ocidem.h
inflating: instantclient_10_2/sdk/include/ocidfn.h
inflating: instantclient_10_2/sdk/include/ociextp.h
inflating: instantclient_10_2/sdk/include/ocikpr.h
inflating: instantclient_10_2/sdk/include/ocixmldb.h
inflating: instantclient_10_2/sdk/include/odci.h
inflating: instantclient_10_2/sdk/include/oratypes.h
inflating: instantclient_10_2/sdk/include/ori.h
inflating: instantclient_10_2/sdk/include/orid.h
inflating: instantclient_10_2/sdk/include/orl.h
inflating: instantclient_10_2/sdk/include/oro.h
inflating: instantclient_10_2/sdk/include/ort.h
inflating: instantclient_10_2/sdk/include/xa.h
inflating: instantclient_10_2/sdk/include/nzt.h
inflating: instantclient_10_2/sdk/include/nzerror.h
creating: instantclient_10_2/sdk/demo/
inflating: instantclient_10_2/sdk/demo/demo.mk
inflating: instantclient_10_2/sdk/demo/cdemo81.c
inflating: instantclient_10_2/sdk/demo/occidemo.sql
inflating: instantclient_10_2/sdk/demo/occidemod.sql
inflating: instantclient_10_2/sdk/demo/occidml.cpp
inflating: instantclient_10_2/sdk/demo/occiobj.cpp
inflating: instantclient_10_2/sdk/demo/occiobj.typ
inflating: instantclient_10_2/sdk/SDK_README
extracting: instantclient_10_2/sdk/ottclasses.zip
inflating: instantclient_10_2/sdk/ott
public@php:/data/php $ unzip basic-10.2.0.5.0-linux-x64.zip
Archive: basic-10.2.0.5.0-linux-x64.zip
inflating: instantclient_10_2/BASIC_README
inflating: instantclient_10_2/classes12.jar
inflating: instantclient_10_2/genezi
inflating: instantclient_10_2/libclntsh.so.10.1
inflating: instantclient_10_2/libnnz10.so
inflating: instantclient_10_2/libocci.so.10.1
inflating: instantclient_10_2/libociei.so
inflating: instantclient_10_2/libocijdbc10.so
inflating: instantclient_10_2/ojdbc14.jar
public@php:/data/php $ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
PS1='['`hostname`@`whoami`:'$PWD']'$ '
export PS1=`uname -n`'@$LOGNAME:$PWD $ '
export ORACLE_HOME=/data/php/instantclient_10_2
5. Tibero Client 설치 및 환경변수 추가 + PHP PATH 추가
public@php:/data/php $ gzip -dc tibero5-bin-FS02*.gz | tar xvf –
public@php:/data/php $ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
PS1='['`hostname`@`whoami`:'$PWD']'$ '
export PS1=`uname -n`'@$LOGNAME:$PWD $ '
export ORACLE_HOME=/data/php/instantclient_10_2
### tibero ###
export TB_HOME=/data/php/tibero5
export TB_SID=tibero
export PATH=.:$TB_HOME/bin:$TB_HOME/client/bin:/data/php/php5/bin:$PATH
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/libpublic@php:/data/php $ cd $TB_HOME
public@php:/data/php/tibero5/config $ gen_tip.sh
Using TB_SID "tibero"
/data/php/tibero5/config/tibero.tip generated
/data/php/tibero5/config/psm_commands generated
/data/php/tibero5/client/config/tbdsn.tbr generated.
Running client/config/gen_esql_cfg.sh
Done.
public@php:/data/php $ cd $TB_HOME/client/config
public@php:/data/php/tibero5/client/config $ cat tbdsn.tbr
#-------------------------------------------------
# /data/php/tibero5/client/config/tbdsn.tbr
# Network Configuration File.
# Generated by gen_tip.sh at 2025. 04. 09. (수) 17:03:13 KST
tibero=(
(INSTANCE=(HOST=192.168.51.162)
(PORT=8629)
(DB_NAME=pub1)
)
) public@php:/data/php $ cd $ORACLE_HOME/sdk/include
public@php:/data/php/instantclient_10_2/sdk/include $ ls -tlr
합계 1464
-r--r--r-- 1 php dba 19099 4월 20 2010 odci.h
-r--r--r-- 1 php dba 4351 4월 20 2010 ocixmldb.h
-r-xr-xr-x 1 php dba 6638 4월 20 2010 ocikpr.h
-r--r--r-- 1 php dba 8954 4월 20 2010 ociextp.h
-r--r--r-- 1 php dba 11331 4월 20 2010 ocidfn.h
-r-xr-xr-x 1 php dba 4014 4월 20 2010 ocidem.h
-r--r--r-- 1 php dba 43225 4월 20 2010 ocidef.h
-r-xr-xr-x 1 php dba 6055 4월 20 2010 ociapr.h
-r--r--r-- 1 php dba 411221 4월 20 2010 ociap.h
-r--r--r-- 1 php dba 10361 4월 20 2010 oci8dp.h
-r-xr-xr-x 1 php dba 7155 4월 20 2010 oci1.h
-r--r--r-- 1 php dba 153066 4월 20 2010 oci.h
-r--r--r-- 1 php dba 29307 4월 20 2010 occiObjects.h
-r--r--r-- 1 php dba 35218 4월 20 2010 occiData.h
-r--r--r-- 1 php dba 73063 4월 20 2010 occiControl.h
-r--r--r-- 1 php dba 38724 4월 20 2010 occiCommon.h
-r--r--r-- 1 php dba 11600 4월 20 2010 occiAQ.h
-r--r--r-- 1 php dba 2115 4월 20 2010 occi.h
-r-xr-xr-x 1 php dba 9520 4월 20 2010 xa.h
-r--r--r-- 1 php dba 116591 4월 20 2010 ort.h
-r--r--r-- 1 php dba 42626 4월 20 2010 oro.h
-r--r--r-- 1 php dba 157674 4월 20 2010 orl.h
-r--r--r-- 1 php dba 15031 4월 20 2010 orid.h
-r--r--r-- 1 php dba 102726 4월 20 2010 ori.h
-r-xr-xr-x 1 php dba 6605 4월 20 2010 oratypes.h
-r--r--r-- 1 php dba 85310 4월 20 2010 nzt.h
-r--r--r-- 1 php dba 33230 4월 20 2010 nzerror.h
public@php:/data/php/instantclient_10_2/sdk/include $ cp oci* $TB_HOME/client/include/
6. library 설정
public@php:/data/php $ cd $TB_HOME/client/lib
public@php:/data/php/tibero5/client/lib $ ln -s libtboci.so libclntsh.so.10.1
public@php:/data/php/tibero5/client/lib $ ln -s libclntsh.so.10.1 libclntsh.so
public@php:/data/php/tibero5/client/lib $
ln -s /data/php/instantclient_10_2/libnnz10.so libnnz10.so
public@php:/data/php/tibero5/client/lib $ ls -tlr
합계 122736
…생략…
drwxr-xr-x 2 php dba 4096 3월 9 16:55 jar
drwxr-xr-x 2 php dba 27 3월 9 16:55 php
lrwxrwxrwx 1 php dba 11 3월 9 17:12 libclntsh.so.10.1 -> libtboci.so
lrwxrwxrwx 1 php dba 17 3월 9 17:12 libclntsh.so -> libclntsh.so.10.1
lrwxrwxrwx 1 php dba 40 3월 9 17:12 libnnz10.so -> /data/php/instantclient_10_2/libnnz10.so
public@php:/data/php/tibero5/client/lib $
7. php oci 설치 및 진행
public@php:/data/php $ tar -xvf oci8-2.0.8.tar
public@php:/data/php $ cd oci8-2.0.8
public@php:/data/php/oci8-2.0.8 $ phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
public@php:/data/php/oci8-2.0.8 $
public@php:/data/php/oci8-2.0.8 $
./configure --with-oci8=shared,instantclient,$TB_HOME/client/lib
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
…생략…
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
public@php:/data/php/oci8-2.0.8 $
public@php:/data/php/oci8-2.0.8 $ make all install
…생략…
Installing shared extensions: /data/php/php5/lib/php/extensions/no-debug-non-zts-20131226/
public@php:/data/php/oci8-2.0.8 $
public@php:/data/php/oci8-2.0.8 $ php --ini
Configuration File (php.ini) Path: /data/php/php5/lib
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
public@php:/data/php/oci8-2.0.8 $
public@php:/data/php/php5/lib $ vi php.ini
extension=oci8.so
public@php:/data/php/php5/lib $
public@php:/data/php/php5/lib $ php --ini
Configuration File (php.ini) Path: /data/php/php5/lib
Loaded Configuration File: /data/php/php5/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
8. 설치 확인
public@php:/data/php/php5/lib $ php -r "oci_connect();"
Warning: oci_connect() expects at least 2 parameters, 0 given in Command line code on line 1
public@php:/data/php/php5/lib $ php -i | grep oci
oci8
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
OLDPWD => /data/php/oci8-2.0.8
_SERVER["OLDPWD"] => /data/php/oci8-2.0.8
_ENV["OLDPWD"] => /data/php/oci8-2.0.8
public@php:/data/php/php5/lib $ php -m | grep oci
oci8
public@php:/data/php/php5/lib $
테스트
<?php
// 1. DB Connection
$user = "tibero";
$password = "tmax";
$conn = oci_connect($user,$password,'tibero');
if($conn)
{
echo "Connection succes\n";
}
else
{
echo "Connection failed\n";
echo oci_error();
exit(1);
}
// 2. Execute Statement
$st1 = "select instance_name i, db_name d, status s from v\$instance";
$stmt = oci_parse($conn, $st1);
$exec = oci_execute($stmt);
while ($rs = oci_fetch_array($stmt)) {
printf(" %s", $rs['I']);
printf(" %s", $rs['D']);
printf(" %s", $rs['S']);
printf("\n");
}
oci_free_statement($stmt);
oci_close($conn);
echo "Finish\n";
?>
public@php:/data/php/php5/work $ php sample1.php
Connection succes
pub1 pub1 NORMAL
Finish
public@php:/data/php/php5/work