문서유형ㅣ기술정보
분야ㅣ인터페이스/연동
적용제품버전ㅣTibero 7
문서번호ㅣTIITI072
개요
본 문서는 TBOCI를 이용한 PHP와 Tibero의 연동 방법을 안내합니다.
PHP 8.4.26 환경에서 OCI8 3.0.1과 Oracle Client 10.2를 사용하여 Tibero 7 FS02 PS06에 접속하는 절차를 설명합니다.
테스트 환경: RHEL 8.4 / PHP 8.4.26 / OCI8 3.0.1 / Oracle Client 10.2 / Tibero 7 FS02 PS06
*** TBOCI 연동 시에는 Tibero의 호환성 보증 범위에 따라 Oracle Client 10.x 버전을 사용해야 합니다.
방법
1. OS 패키지 확인
PHP 빌드에 필요한 패키지를 확인합니다.
[root@Gdb1 ~]# rpm -q gcc gcc-c++ make autoconf bison re2c \ pkgconf-pkg-config libxml2-devel openssl-devel \ zlib-devel oniguruma-devel sqlite-devel glibc-devel
Oracle Client 및 TBOCI 라이브러리 연동에 필요한 패키지를 확인합니다.
[root@Gdb1 ~]# rpm -q libaio libaio-devel
2. 사용자 생성 및 환경 변수 설정
PHP 설치 및 연동 작업에 사용할 계정을 생성합니다.
[root@Gdb1 ~]# useradd php84
사용자의 환경 변수를 설정합니다.
[root@Gdb1 ~]# su - php84
[php84@Gdb1:/home/php84]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
stty erase ^H
### User ENV ###
export PS1="[`whoami`@`hostname`:\$PWD]$ "
export EDITOR=vim
### JAVA ENV ###
export JAVA_HOME=/etc/alternatives/jre_1.8.0
export JDK_HOME=$JAVA_HOME
### PHP ENV ###
export PHP_HOME=/home/php84/php84
export PHP_SRC=/home/php84/php-8.4.26
### Oracle Instant Client 10.2 ###
export ORACLE_HOME=/home/php84/instantclient_10_2
### Tibero Client ###
export TB_HOME=/home/php84/tibero7
export TB_SID=tibero
### Library Path ###
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib:$ORACLE_HOME
### Include Path ###
export C_INCLUDE_PATH=$TB_HOME/client/include:$ORACLE_HOME/include
### PATH ###
export PATH=$JAVA_HOME/bin:$TB_HOME/bin:$TB_HOME/client/bin:$PHP_HOME/bin:/bin:/usr/local/bin:/usr/bin:/webserver/bin:/lib/system:/home/php84/.local/bin:/home/php84/bin:/usr/local/sbin:/usr/sbin
[php84@Gdb1:/home/php84]$ source ~/.bash_profile
3. PHP 설치
PHP 소스 패키지를 압축 해제합니다.
[php84@Gdb1:/home/php84]$ cd /home/php84
[php84@Gdb1:/home/php84]$ tar -xzf php-8.4.26.tar.gz
PHP 소스 디렉터리로 이동하여 configure를 실행합니다.
[php84@Gdb1:/home/php84]$ cd /home/php84/php-8.4.26
[php84@Gdb1:/home/php84/php-8.4.26]$ CFLAGS="-fPIE" \
LDFLAGS="-pie" \
./configure \
--prefix=/home/php84/php84 \
--enable-fpm \
--with-config-file-path=/home/php84/php84/etc \
--with-config-file-scan-dir=/home/php84/php84/etc/php.d \
--enable-mbstring \
--enable-pdo \
--with-pdo-mysql \
--enable-sockets \
--with-zlib \
--with-libdir=lib64
참고
본 테스트 환경에서 PHP 컴파일 시 발생한 PIE 관련 링커 오류를 해결하기 위해 CFLAGS와 LDFLAGS를 지정합니다. 해당 설정의 적용 여부는 OS 및 컴파일러 환경에 따라 달라질 수 있습니다.
PHP 소스를 컴파일하고 설치합니다.
[php84@Gdb1:/home/php84/php-8.4.26]$ make -j2
[php84@Gdb1:/home/php84/php-8.4.26]$ make install
PHP 버전을 확인합니다.
[php84@Gdb1:/home/php84/php-8.4.26]$ $PHP_HOME/bin/php -v
PHP 8.4.26 (cli) (built: Nov 2 2026 16:10:52) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.26, Copyright (c) Zend Technologies
4. Oracle client 10.2 설치
Oracle Client SDK 및 Basic 패키지를 압축 해제합니다.
[php84@Gdb1:/home/php84/php-8.4.26]$ cd
[php84@Gdb1:/home/php84]$ unzip sdk-10.2.0.5.0-linux-x64.zip
[php84@Gdb1:/home/php84]$ unzip basic-10.2.0.5.0-linux-x64.zip
Oracle Client 설치 확인
[php84@Gdb1:/home/php84]$ cd $ORACLE_HOME
[php84@Gdb1:/home/php84/instantclient_10_2]$ ls -al
total 108378
drwxr-xr-x 3 php84 dba 4096 Nov 3 13:47 .
drwx------ 17 php84 dba 4096 Nov 3 13:47 ..
-rw-rw-r-- 1 php84 dba 228 Apr 20 2010 BASIC_README
-r--r--r-- 1 php84 dba 1621582 Apr 20 2010 classes12.jar
-rwxrwxr-x 1 php84 dba 70742 Apr 20 2010 genezi
-rwxrwxr-x 1 php84 dba 25306574 Apr 20 2010 libclntsh.so.10.1
-r-xr-xr-x 1 php84 dba 7856305 Apr 20 2010 libnnz10.so
-rwxrwxr-x 1 php84 dba 1669888 Apr 20 2010 libocci.so.10.1
-rwxrwxr-x 1 php84 dba 72703820 Apr 20 2010 libociei.so
-r-xr-xr-x 1 php84 dba 150417 Apr 20 2010 libocijdbc10.so
-r--r--r-- 1 php84 dba 1569316 Apr 20 2010 ojdbc14.jar
drwxrwxr-x 4 php84 dba 4096 Apr 20 2010 sdk
5. Tibero Client 설치 및 설정
Tibero Client 패키지를 압축 해제합니다.
[php84@Gdb1:/home/php84/instantclient_10_2]$ cd
[php84@Gdb1:/home/php84]$ tar xvzf tibero7-bin-FS02_PS06-linux64_4.18-322442-20260806141521.tar.gz
Tibero Client 설치 확인
[php84@Gdb1:/home/php84]$ cd $TB_HOME
[php84@Gdb1:/home/php84/tibero7]$ ls -al
total 12
drwxr-xr-x 9 php84 dba 4096 Aug 6 14:47 .
drwx------ 18 php84 dba 4096 Nov 3 13:49 ..
drwxr-xr-x 3 php84 dba 4096 Aug 6 14:47 bin
drwxr-xr-x 7 php84 dba 4096 Aug 6 14:47 client
drwxr-xr-x 2 php84 dba 4096 Aug 6 14:47 config
drwxr-xr-x 2 php84 dba 4096 Aug 6 14:47 lib
drwxr-xr-x 3 php84 dba 4096 Aug 6 14:47 license
drwxr-xr-x 3 php84 dba 4096 Aug 6 14:47 nls
drwxr-xr-x 7 php84 dba 8192 Aug 6 14:47 scripts
Tibero 환경 설정 파일을 생성합니다.
[php84@Gdb1:/home/php84/tibero7]$ sh $TB_HOME/config/gen_tip.sh
DB 접속 정보를 설정합니다.
[php84@Gdb1:/home/php84/tibero7]$ vi $TB_HOME/client/config/tbdsn.tbr
tibero=(
(INSTANCE=(HOST=localhost)
(PORT=8629)
(DB_NAME=tibero7)
)
)
6. OCI8 설치 및 TBOCI 연동
OCI8 소스 패키지의 압축을 해제합니다.
[php84@Gdb1:/home/php84/tibero7]$ cd
[php84@Gdb1:/home/php84]$ tar -xvzf oci8-3.0.1.tgz
OCI8 소스를 수정합니다.
[php84@Gdb1:/home/php84]$ cd /home/php84/oci8-3.0.1
[php84@Gdb1:/home/php84/oci8-3.0.1]$ grep -n 'php_strtolower' oci8.c
1042: php_strtolower(ZSTR_VAL(hashed_details.s), ZSTR_LEN(hashed_details.s));
2160: php_strtolower(ZSTR_VAL(spool_hashed_details.s), ZSTR_LEN(spool_hashed_details.s));
[php84@Gdb1:/home/php84/oci8-3.0.1]$ sed -i 's/php_strtolower(/zend_str_tolower(/g' oci8.c
[php84@Gdb1:/home/php84/oci8-3.0.1]$ grep -n 'tolower' oci8.c
1042: zend_str_tolower(ZSTR_VAL(hashed_details.s), ZSTR_LEN(hashed_details.s));
2160: zend_str_tolower(ZSTR_VAL(spool_hashed_details.s), ZSTR_LEN(spool_hashed_details.s));
참고
PHP 8.4.26 및 OCI8 3.0.1 빌드 시 발생한 소스 호환성 문제를 해결하기 위해 oci8.c 파일의 php_strtolower() 호출을 zend_str_tolower()로 변경합니다. 해당 수정은 본 테스트 환경에서 적용한 내용이며, 다른 PHP 및 OCI8 버전에서는 별도 검증이 필요합니다.
소스 수정이 완료되면 PHP 확장 모듈 빌드에 필요한 설정 파일을 생성합니다.
[php84@Gdb1:/home/php84/oci8-3.0.1]$ /home/php84/php84/bin/phpize
Configuring for:
PHP Version: 8.4
PHP Api Version: 20240924
Zend Module Api No: 20240924
Zend Extension Api No: 420240924
Oracle Client SDK의 헤더 파일을 Tibero Client의 include 디렉터리로 복사합니다.
[php84@Gdb1:/home/php84/oci8-3.0.1]$ cd
[php84@Gdb1:/home/php84]$ cp $ORACLE_HOME/sdk/include/* $TB_HOME/client/include/
제공받은 TBOCI 라이브러리와 버전 확인 파일을 Tibero Client의 client/lib 디렉터리에 복사합니다.
[php84@Gdb1:/home/php84]$ cp libtboci.so $TB_HOME/client/lib/
[php84@Gdb1:/home/php84]$ cp libtbOCI_info $TB_HOME/client/lib/
참고
TBOCI 라이브러리는 Tibero 엔진에 포함되어 있지 않으므로, 라이브러리 파일(libtboci.so) 및 버전 확인 파일(libtbOCI_info)을 별도로 제공받아야 합니다.
해당 파일은 Tibero 공식 다운로드 페이지에서 다운 받을 수 있습니다.
TBOCI 라이브러리와 버전 확인 파일의 배치 여부를 확인합니다.
[php84@Gdb1:/home/php84]$ ls -l $TB_HOME/client/lib/libtboci.so
[php84@Gdb1:/home/php84]$ ls -l $TB_HOME/client/lib/libtbOCI_info
[php84@Gdb1:/home/php84]$ cd $TB_HOME/client/lib
[php84@Gdb1:/home/php84/tibero7/client/lib]$ ./libtbOCI_info
Get tbOCI Build Version Success!!!
Build Version: 7 r305427
TBOCI 라이브러리를 Oracle Client 라이브러리 이름으로 참조할 수 있도록 심볼릭 링크를 구성합니다.
[php84@Gdb1:/home/php84]$ cd $TB_HOME/client/lib
[php84@Gdb1:/home/php84/tibero7/client/lib]$ ln -s libtboci.so libclntsh.so.10.1
[php84@Gdb1:/home/php84/tibero7/client/lib]$ ln -s libclntsh.so.10.1 libclntsh.so
[php84@Gdb1:/home/php84/tibero7/client/lib]$ ln -s /home/php84/instantclient_10_2/libnnz10.so libnnz10.so
심볼릭 링크 생성 결과를 확인합니다.
[php84@Gdb1:/home/php84/tibero7/client/lib]$ ls -l | grep '^l'
lrwxrwxrwx 1 php84 dba 17 Nov 2 16:56 libclntsh.so -> libclntsh.so.10.1
lrwxrwxrwx 1 php84 dba 11 Nov 2 16:56 libclntsh.so.10.1 -> libtboci.so
lrwxrwxrwx 1 php84 dba 42 Nov 2 16:57 libnnz10.so -> /home/php84/instantclient_10_2/libnnz10.so
OCI8 소스 디렉터리로 이동한 후 configure를 실행합니다.
[php84@Gdb1:/home/php84/tibero7/client/lib]$ cd /home/php84/oci8-3.0.1
[php84@Gdb1:/home/php84/oci8-3.0.1]$ ./configure \
--with-php-config=/home/php84/php84/bin/php-config \
--with-oci8=shared,/home/php84/tibero7/client
OCI8 확장 모듈의 TBOCI 라이브러리 참조 여부를 확인합니다.
[php84@Gdb1:/home/php84/oci8-3.0.1]$ make -j2
[php84@Gdb1:/home/php84/oci8-3.0.1]$ make install
Installing shared extensions: /home/php84/php84/lib/php/extensions/no-debug-non-zts-20240924/
OCI8 확장 모듈을 컴파일하고 설치합니다.
[php84@Gdb1:/home/php84/oci8-3.0.1]$ ldd /home/php84/php84/lib/php/extensions/no-debug-non-zts-20240924/oci8.so
linux-vdso.so.1 (0x00007ffda43af000)
libtboci.so => /home/php84/tibero7/client/lib/libtboci.so (0x00001519dfd6e000)
libc.so.6 => /lib64/libc.so.6 (0x00001519df998000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00001519df778000)
libdl.so.2 => /lib64/libdl.so.2 (0x00001519df574000)
libm.so.6 => /lib64/libm.so.6 (0x00001519df1f2000)
librt.so.1 => /lib64/librt.so.1 (0x00001519defea000)
/lib64/ld-linux-x86-64.so.2 (0x00001519e1cda000)
PHP 설정 디렉터리를 생성하고 PHP 기본 설정 파일을 복사합니다.
[php84@Gdb1:/home/php84/oci8-3.0.1]$ cd
[php84@Gdb1:/home/php84]$ mkdir -p /home/php84/php84/etc/php.d
[php84@Gdb1:/home/php84]$ cp /home/php84/php-8.4.26/php.ini-development /home/php84/php84/etc/php.ini
php.ini 파일을 수정하여 OCI8 확장 모듈을 등록합니다.
[php84@Gdb1:/home/php84]$ vi /home/php84/php84/etc/php.ini
extension=oci8.so
OCI8 모듈이 정상적으로 로드되는지 확인합니다.
[php84@Gdb1:/home/php84]$ /home/php84/php84/bin/php --ri oci8
oci8
OCI8 Support => enabled
OCI8 DTrace Support => disabled
OCI8 Version => 3.0.1
Oracle Run-time Client Library Version => 10.2.0.0.0
Oracle Compile-time Version => 10.2
Compile-time ORACLE_HOME => /home/php84/tibero7/client
Libraries Used => -Wl,-rpath,/home/php84/tibero7/client/lib -L/home/php84/tibero7/client/lib -lclntsh
Directive => Local Value => Master Value
oci8.max_persistent => -1 => -1
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
oci8.default_prefetch => 100 => 100
oci8.old_oci_close_semantics => Off => Off
oci8.events => Off => Off
Statistics =>
Active Persistent Connections => 0
Active Connections => 0
7. Tibero 연결 테스트
OCI8을 이용한 Tibero 연결 테스트 스크립트를 작성합니다.
[php84@Gdb1:/home/php84]$ vi /home/php84/oci_test.php
<?php
$conn = oci_connect('sys', 'tibero', 'tibero');
if (!$conn) {
$e = oci_error();
echo "Connection failed: " . $e['message'] . PHP_EOL;
exit(1);
}
echo "Tibero OCI8 Connection Success" . PHP_EOL;
$sql = "SELECT 'Tibero OCI8 Test' AS MSG FROM DUAL";
$stmt = oci_parse($conn, $sql);
if (!oci_execute($stmt)) {
$e = oci_error($stmt);
echo "SQL Error: " . $e['message'] . PHP_EOL;
exit(1);
}
$row = oci_fetch_assoc($stmt);
print_r($row);
oci_free_statement($stmt);
oci_close($conn);
?>
테스트 스크립트를 실행하여 Tibero 연결 및 SQL 수행 결과를 확인합니다.
[php84@Gdb1 ~]$ $PHP_HOME/bin/php /home/php84/oci_test.php
Tibero OCI8 Connection Success
Array
(
[MSG] => Tibero OCI8 Test
)