✔️ CentOS 6.2, 64비트에서 테스트하였습니다.
- PHP에서 오라클 DB 사용하기
1 PHP-OCI 연동 확인 (실패)
PHP와 OCI 모듈이 연동되었는지는 OCI 함수를 하나 실행해보면 알 수 있다.
- 명령어
Bash
Copy
php -r "oci_connect();"
- 실행예시
bat
Copy
[root@jmnote ~]# php -r "oci_connect();"
PHP Fatal error: Call to undefined function oci_connect() in Command line code on line 1
Fatal error: Call to undefined function oci_connect() in Command line code on line 1
- → oci_connect라는 함수를 찾을 수 없다고 한다. 즉 PHP와 OCI 모듈이 연동되지 않았다.
2 PHP 설정 확인
bat
Copy
[root@jmnote ~]# 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
- → /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)을 다운로드해보자
- http://www.oracle.com/technetwork/indexes/downloads/index.html#database 접속
- "Database" --- [Instant Client]
- [Instant Client for Linux x86-64]
- (O) Accept License Agreement
- oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm 클릭
- 오라클 계정 로그인[1]하여 다운로드
- http://www.oracle.com/technetwork/indexes/downloads/index.html#database 재접속
- "Database" --- [Instant Client]
- (O) Accept License Agreement (체크된 것으로 보여도 클릭해줘야 함;;)
- oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm 클릭하여 다운로드
4 오라클 instant client 설치
- 위에서 받은 파일 2개를 리눅스 서버에 업로드
- 서버에서 아래 명령어 실행
- 명령어
Bash
Copy
rpm -i oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
rpm -i oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
rpm -qa | grep oracle
- 실행예시 (실패)
bat
Copy
[root@jmnote ~]# 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
- → libaio 필요. libaio 설치 후 다시 시도.
- 실행예시 (성공)
bat
Copy
[root@jmnote ~]# rpm -i oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
[root@jmnote ~]# rpm -i oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
[root@jmnote ~]# 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
- → 정상적으로 설치되었다.
- 설치파일 제거
Bash
Copy
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
5 OCI8 설치
- 명령어
Bash
Copy
pecl download oci8
tar xvzf oci8-1.4.7.tgz
cd oci8-1.4.7
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
위에서 OCI8 다운로드 부분인 pecl download oci8
은, 이것 대신 wget http://pecl.php.net/get/oci8-1.4.7.tgz
를 실행하거나, http://pecl.php.net/package/oci8 에서 직접 다운로드해도 된다.
- 실행예시 (실패)
bat
Copy
[root@jmnote ~]# pecl download oci8
-bash: pecl: command not found
- → pecl 설치 후 재시도
bat
Copy
[root@ipctool oci8-1.4.7]# phpize
-bash: phpize: command not found
- → php-devel 설치 후 재시도
- 실행예시 (성공)
bat
Copy
[root@jmnote ~]# pecl download oci8
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading oci8-1.4.7.tgz ...
Starting to download oci8-1.4.7.tgz (168,584 bytes)
.....................................done: 168,584 bytes
File /root/oci8-1.4.7.tgz downloaded
bat
Copy
[root@jmnote ~]# tar xvzf oci8-1.4.7.tgz
package.xml
oci8-1.4.7/tests/array_bind_001.phpt
oci8-1.4.7/tests/array_bind_002.phpt
... (생략)
oci8-1.4.7/php_oci8.h
oci8-1.4.7/php_oci8_int.h
oci8-1.4.7/README
bat
Copy
[root@jmnote ~]# cd oci8-1.4.7
[root@jmnote oci8-1.4.7]# phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@jmnote oci8-1.4.7]# ./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 whether to build shared libraries... yes
checking whether to build static libraries... no
configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands
[root@jmnote oci8-1.4.7]# ln -s /usr/include/oracle/11.2/client64/ /usr/lib/oracle/11.2/client64/lib/include
[root@jmnote oci8-1.4.7]# make all install
/bin/sh /root/oci8-1.4.7/libtool --mode=compile cc -I. -I/root/oci8-1.4.7 -DPHP_ATOM_INC -I/root/oci8-1.4.7/include -I/root/oci8-1.4.7/main -I/root/oci8-1.4.7 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/oracle/11.2/client64 -DHAVE_CONFIG_H -g -O2 -c /root/oci8-1.4.7/oci8.c -o oci8.lo
libtool: compile: cc -I. -I/root/oci8-1.4.7 -DPHP_ATOM_INC -I/root/oci8-1.4.7/include -I/root/oci8-1.4.7/main -I/root/oci8-1.4.7 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/oracle/11.2/client64 -DHAVE_CONFIG_H -g -O2 -c /root/oci8-1.4.7/oci8.c -fPIC -DPIC -o .libs/oci8.o
... (생략)
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/lib64/php/modules/
- → ll /usr/lib64/php/modules/ 에 oci8.so 가 생겼다.
- 확인
bat
Copy
[root@jmnote oci8-1.4.7]# ll /usr/lib64/php/modules/oci8.so
-rwxr-xr-x 1 root root 505283 Jun 15 11:31 /usr/lib64/php/modules/oci8.so
6 PHP와 OCI 연동
- 명령어
Bash
Copy
echo 'extension=oci8.so' > /etc/php.d/oci8.ini
service httpd restart
- 실행예시
bat
Copy
[root@jmnote oci8-1.4.7]# echo 'extension=oci8.so' > /etc/php.d/oci8.ini
[root@jmnote oci8-1.4.7]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
7 PHP-OCI 연동 확인 (성공)
- 명령어
Bash
Copy
php -r "oci_connect();"
- 실행예시
bat
Copy
[root@jmnote ~]# php -r "oci_connect();"
PHP Warning: oci_connect() expects at least 2 parameters, 0 given in Command line code on line 1
Warning: oci_connect() expects at least 2 parameters, 0 given in Command line code on line 1
- → oci_connect의 사용법이 잘못되었다고 한다. PHP와 OCI 모듈이 연동된 것이다.
이제 통상적인 PHP 개발로 넘어가면 된다.
8 주석
- ↑ 계정 없으면 가입...
9 같이 보기
10 참고 자료
편집자 Jmnote Jmnote bot
로그인하시면 댓글을 쓸 수 있습니다.
YoWu 2014-12-07
- 분류 댓글:
- PHP (8)
- 오라클 DB (1)
PHP 파일 다운로드 구현 2 (한글 파일명 지원) ― …PHP에서 오라클 DB 사용 ― YoWuPHP 파일 업로드 구현 ― 일리단사오육칠PHP 파일 업로드 구현 ― JmnotePHP 파일 다운로드 구현 2 (한글 파일명 지원) ― AnmkstLib my.php ― 신정섭Lib my.php ― Jmnote로또번호 생성 ― Pinkcrimson