PHP에서 오라클 DB 사용

Jmnote bot (토론 | 기여)님의 2020년 11월 2일 (월) 00:42 판 (봇: 자동으로 텍스트 교체 (-</source> +</syntaxhighlight>))
PHP에서 오라클 DB 사용하기
PHP와 Oracle 사용하기
PHP Oracle 연동
oci8 설치

1 PHP-OCI 연동 확인 (실패)

PHP와 OCI 모듈이 연동되었는지는 OCI 함수를 하나 실행해보면 알 수 있다.

<source lang='console'> [root@zetawiki ~]# php -r "oci_connect();" Fatal error: Call to undefined function oci_connect() in Command line code on line 1 </syntaxhighlight>

oci_connect()라는 함수를 찾을 수 없다고 한다. 즉 PHP와 OCI 모듈이 연동되지 않았다.

2 PHP 설정 확인

<source lang='console'> [root@zetawiki ~]# php --ini Configuration File (php.ini) Path: /etc Loaded Configuration File: /etc/php.ini Scan for additional .ini files in: /etc/php.d Additional .ini files parsed: /etc/php.d/curl.ini, /etc/php.d/fileinfo.ini, /etc/php.d/json.ini, /etc/php.d/mysql.ini, /etc/php.d/mysqli.ini, /etc/php.d/pdo.ini, /etc/php.d/pdo_mysql.ini, /etc/php.d/pdo_sqlite.ini, /etc/php.d/phar.ini, /etc/php.d/sqlite3.ini, /etc/php.d/zip.ini </syntaxhighlight>

→ /etc/php.ini 파일과 /etc/php.d/*.ini 파일들이 설정 파일이다.
→ 우선 php.ini를 열어 ;extension=oci8.so가 있는지 확인해보자. 만약 있다면 주석을 풀어주고 httpd를 재시작하면 바로 작동할 것이다.
→ 그런데 위의 예시같은 경우에는 php.ini에 extension 설정이 없을 것이다. /etc/php.d 에 oci8.ini 파일을 생성하여 설정하라는 의미이다.

3 오라클 instant client 다운로드

리눅스용 instant client rpm(basic, devel)을 다운로드해보자

4 오라클 instant client 설치

  • 위에서 받은 파일 2개를 리눅스 서버에 업로드
  • 서버에서 아래 명령어 실행
명령어

<source lang='bash'> rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm rpm -qa | grep oracle </syntaxhighlight>

실행예시 (실패)

<source lang='console'> [root@zetawiki ~]# rpm -i oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm error: Failed dependencies:

       libaio is needed by oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64

</syntaxhighlight>

→ libaio 필요. libaio 설치 후 다시 시도.
실행예시 (성공)

<source lang='console'> [root@zetawiki ~]# rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm Preparing... ########################################### [100%]

  1:oracle-instantclient11.########################################### [100%]

</syntaxhighlight> <source lang='console'> [root@zetawiki ~]# rpm -ivh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm Preparing... ########################################### [100%]

  1:oracle-instantclient11.########################################### [100%]

</syntaxhighlight> <source lang='console'> [root@zetawiki ~]# rpm -qa | grep oracle oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64 oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64 </syntaxhighlight>

→ 정상적으로 설치되었다.
설치파일 제거

<source lang='bash'> rm -f oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm rm -f oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm </syntaxhighlight>

5 OCI8 설치

명령어

<source lang='bash'> pecl download oci8-1.4.9.tgz tar xvzf oci8-1.4.9.tgz cd oci8-1.4.9 phpize ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib ln -s /usr/include/oracle/11.2/client64/ /usr/lib/oracle/11.2/client64/lib/include make all install </syntaxhighlight> 위에서 OCI8 다운로드 부분인 pecl download oci8-1.4.9.tgz은, 이것 대신 wget http://pecl.php.net/get/oci8-1.4.9.tgz를 실행하거나, http://pecl.php.net/package/oci8 에서 직접 다운로드해도 된다.

실행예시 (실패)

<source lang='console'> [root@zetawiki ~]# pecl download oci8-1.4.9.tgz -bash: pecl: command not found </syntaxhighlight>

pecl 설치 후 재시도

<source lang='console'> [root@zetawiki oci8-1.4.9]# phpize -bash: phpize: command not found </syntaxhighlight>

php-devel 설치 후 재시도

<source lang='console'> [root@zetawiki oci8-1.4.9]# ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib 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 checking for cc... no checking for gcc... no configure: error: in `/root/oci8-1.4.9': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details. </syntaxhighlight>

→ C 컴파일러가 없다고 한다. gcc 설치 후 재시도

<source lang='console'> [root@zetawiki oci8-1.4.9]# make all install -bash: make: command not found </syntaxhighlight>

→ make가 없다고 한다. make 설치 후 재시도
실행예시 (성공)

<source lang='console'> [root@zetawiki ~]# pecl download oci8-1.4.9.tgz downloading oci8-1.4.9.tgz ... Starting to download oci8-1.4.9.tgz (169,255 bytes) .....................................done: 169,255 bytes File /root/oci8-1.4.9.tgz downloaded </syntaxhighlight> <source lang='console'> [root@zetawiki ~]# tar xvzf oci8-1.4.9.tgz ... (생략) oci8-1.4.9/php_oci8.h oci8-1.4.9/php_oci8_int.h oci8-1.4.9/README </syntaxhighlight> <source lang='console'> [root@zetawiki ~]# cd oci8-1.4.9 [root@zetawiki oci8-1.4.9]# phpize Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626 </syntaxhighlight> <source lang='console'> [root@zetawiki oci8-1.4.9]# ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib ... (생략) configure: creating ./config.status config.status: creating config.h config.status: executing libtool commands </syntaxhighlight> <source lang='console'> [root@zetawiki oci8-1.4.9]# ln -s /usr/include/oracle/11.2/client64/ /usr/lib/oracle/11.2/client64/lib/include [root@zetawiki oci8-1.4.9]# make all install ... (생략) Build complete. Don't forget to run 'make test'.

Installing shared extensions: /usr/lib64/php/modules/ </syntaxhighlight>

→ /usr/lib64/php/modules/ 에 PHP 확장기능 oci8.so 가 설치되었다.
확인

<source lang='console'> [root@zetawiki oci8-1.4.9]# ll /usr/lib64/php/modules/oci8.so -rwxr-xr-x 1 root root 502555 Jun 19 14:44 /usr/lib64/php/modules/oci8.so </syntaxhighlight>

6 PHP와 OCI 연동

명령어

<source lang='bash'> echo 'extension=oci8.so' > /etc/php.d/oci8.ini service httpd restart </syntaxhighlight>

실행예시

<source lang='console'> [root@zetawiki oci8-1.4.9]# echo 'extension=oci8.so' > /etc/php.d/oci8.ini [root@zetawiki oci8-1.4.9]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] </syntaxhighlight>

7 PHP-OCI 연동 확인 (성공)

명령어

<source lang='bash'> php -r "oci_connect();" </syntaxhighlight>

실행예시

<source lang='console'> [root@zetawiki ~]# php -r "oci_connect();" Warning: oci_connect() expects at least 2 parameters, 0 given in Command line code on line 1 </syntaxhighlight>

→ oci_connect의 사용법이 잘못되었다고 한다. PHP와 OCI 모듈이 연동된 것이다.

이제 통상적인 PHP 개발로 넘어가면 된다.

8 같이 보기

9 참고

  1. 계정 없으면 가입...
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}