Oracle 19c Client설치 및 PHP 연동하기

| 2021년 7월 11일 | 0 Comments

Oracle, PHP 연동

연동하기 전 PHP 버전 및 모듈 확인합니다.

# php -v
PHP 7.3.27 (cli) (built: May 13 2021 08:42:29) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.27, Copyright (c) 1998-2018 Zend Technologies
with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.
with Zend OPcache v7.3.27, Copyright (c) 1999-2018, by Zend Technologies

현재 php 모듈입니다.

# php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imap
ionCube Loader
json
libxml
mbstring
mcrypt
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache
the ionCube PHP Loader + ionCube24

 

오라클 버전 확인합니다.

[oracle@JH bin]$ sqlplus

SQL*Plus: Release 19.0.0.0.0 – Production on Sun Jul 11 19:14:28 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Enter user-name: / as sysdba

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0

SQL> SELECT * FROM PRODUCT_COMPONENT_VERSION;

PRODUCT
——————————————————————————–
VERSION
——————————————————————————–
VERSION_FULL
——————————————————————————–
STATUS
——————————————————————————–
Oracle Database 19c Enterprise Edition
19.0.0.0.0
19.3.0.0.0
Production

 

PHP 설치된 버전에서 오라클 설치할 수 있는 모듈이 있는지 확인합니다.

# ll /usr/local/src/APM_Setup/php-7.3.27/ext/

drwxr-xr-x 8 centos centos 4096 Jun 17 02:41 oci8

drwxr-xr-x 8 centos centos 4096 Jun 17 02:44 pdo_oci

 

2가지 모듈이 있으면 현재 php 버전에서 오라클 모듈을 추가 설치 할 수 있습니다.

 

오라클 홈페이지에서 Oracle Client관련 파일들을 다운로드해서 서버에 넣어줍니다.

oracle-instantclient19.11-basic-19.11.0.0.0-1.x86_64.rpm
oracle-instantclient19.11-odbc-19.11.0.0.0-1.x86_64.rpm
oracle-instantclient19.11-devel-19.11.0.0.0-1.x86_64.rpm
oracle-instantclient19.11-sqlplus-19.11.0.0.0-1.x86_64.rpm
oracle-instantclient19.11-jdbc-19.11.0.0.0-1.x86_64.rpm
oracle-instantclient19.11-tools-19.11.0.0.0-1.x86_64.rpm

현재 oracle 홈페이지에서 Oracle Client 관련 프로그램들을 제공하는 패키지입니다.

설치해줍니다.

# rpm -ivh oracle-instantclient19.11-basic-19.11.0.0.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient19.11-odbc-19.11.0.0.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient19.11-devel-19.11.0.0.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient19.11-sqlplus-19.11.0.0.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient19.11-jdbc-19.11.0.0.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient19.11-tools-19.11.0.0.0-1.x86_64.rpm

설치가 완료되고 나서 php 추가 모듈에서 설치해줍니다.

 

oci8 추가모듈 설치

 

# cd /usr/local/src/APM_Setup/php-7.3.27/ext/oci8
# /usr/local/php/bin/phpize     (소스설치)     [패키지설치 = /usr/bin/phpize]
# ./configure –with-oci8=instantclient,/usr/lib/oracle/19.11/client64/lib/
# make -j8
# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20180731/
# ll /usr/local/php/lib/php/extensions/no-debug-zts-20180731/
total 3284
-rwxr-xr-x 1 root root 703648 Jun 17 02:42 oci8.so

여기서 # cd /usr/local/src/APM_Setup/php-7.3.27/ext/oci8 까지 들어가서 ./configure –help 명령어를 확인해보면 

–with-oci8=DIR Include Oracle Database OCI8 support. DIR defaults to $ORACLE_HOME.
Use –with-oci8=instantclient,/path/to/instant/client/lib

이렇게 나옵니다. /path/to/instant/client/lib 는 위에서 Oracle Client를 설치할때 생겨난 위치입니다. 

즉, /usr/lib/oracle/19.11/client64/lib/ 입니다. 11g, 12c, 18c 를 오라클 클라이언트를 설치하게 된다면 /usr/lib/oracle/오라클클라이언트버전/client64/lib/ 이렇게 써야합니다.

간혹가다 설정에 의하여 –with-php-config=PATH 를 써야한다고 오류 메시지가 나온다면 –with-php-config=/usr/local/php/bin/php-config 를 쓰면 됩니다.

만약 APM이 패키지 설치라면 –with-php-config=/usr/bin/php-config 입니다.

 

PDO_OCI 추가모듈 설치

# cd /usr/local/src/APM_Setup/php-7.3.27/ext/pdo_oci
# /usr/local/php/bin/phpize
# ./configure –with-pdo-oci=instantclient, /usr/lib/oracle/19.11/client64/
# make -j8
# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20180731/
-rwxr-xr-x 1 root root 144744 Jun 17 02:45 pdo_oci.so

 

설치된 php 설정파일이 보통 /usr/local/apache/conf/php.ini 에 있을 겁니다. 만약 아니라면 phpinfo 페이지에서 php.ini 설정파일 위치를 찾아야합니다.

또한 php.ini 설정파일에서 추가모듈 적용되는 기본 디렉토리 위치가 있습니다. 그 부분을 정확하게 확인해야합니다.

명령어를 아래와 같습니다.

 

extension_dir 위치 찾기 명령어
# php -r “phpinfo();” | grep ^extension
extension_dir => /usr/local/php/lib/php/extensions/no-debug-zts-20180731 => /usr/local/php/lib/php/extensions/no-debug-zts-20180731

 

# vi /usr/local/apache/conf/php.ini

 

맨 하단에 해당 설정 넣어주기

[oci8]
extension=oci8.so

[pdo_oci]
extension=pdo_oci.so

 

php 적용된 모듈 확인명령어로 확인합니다.

# php -m | grep oci
oci8
# php -m | grep OCI
PDO_OCI

 

# /etc/init.d/apachectl restart    

Apache 재시작을 해서 웹에 오라클 모듈을 제대로 적용합니다.

 

적용되었는지 확인 명령어 입니다.

# php -r “oci_connect();”
Fatal error: Call to undefined function oci_connect() in Command line code on line 1
-> 연동안된 상태입니다.

# php -r “oci_connect();”
Warning: oci_connect() expects at least 2 parameters, 0 given in Command line code on line 1
-> 연동 된것을 확인할 수 있습니다.

 

oracle 기본포트는 1521포트 입니다.

그러나 서버에서 oracle 포트가 무엇인지 확인을 해야합니다.

[oracle@JH oci8]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 – Production on 11-JUL-2021 19:32:53

Copyright (c) 1991, 2019, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1539)))
STATUS of the LISTENER
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 – Production
Start Date 28-JUN-2021 01:37:23
Uptime 13 days 17 hr. 55 min. 30 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/19.3/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/JH/listener/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1539)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

 

# vi /usr/local/src/oracle-php_test.php

==================================================================================

$dbuser=”유저”;
$dbpass=”패스워드”;

$dbsid = “(
DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = localhost)
(PORT = 1539)
)
)

(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
) “;

$conn = @oci_connect($dbuser,$dbpass,$dbsid);

if(!$conn) {
echo “No Connection “.oci_error();
exit;
} else {
echo “Connect Success!”;
}

$query = ‘select * from dual’;

$stmt = oci_parse($conn,$query);
oci_execute($stmt);

while($row = oci_fetch_assoc($stmt))
{
print_r($row);
}

// 오라클 접속 닫기
oci_free_statement($stmt);
// 오라클에서 로그아웃
oci_close($conn);

==================================================================================

이상입니다.

Category: LINUX

Avatar

About the Author ()