Oracle OCI8 설치
OCI8로 PHP 구성하기
OCI8을 구성하기 전에 이전 요구 사항 섹션을 검토하십시오.
웹 서버를 시작하기 전에 OCI8은 일반적으로 라이브러리를 찾고 구성 파일을 가리키며 Oracle 라이브러리에서 사용하는 문자 집합과 같은 몇 가지 기본 속성을 설정하기 위해 여러 Oracle 환경 변수(아래 참조)가 필요합니다. PHP 프로세스가 시작되기 전에 변수를 설정해야 합니다.
PHP 바이너리는 구성된 것과 동일하거나 더 최신의 Oracle 라이브러리 주요 버전과 연결되어야 합니다. 예를 들어 Oracle 19 라이브러리를 사용하여 OCI8을 빌드하는 경우 PHP도 배포하고 Oracle 19 라이브러리와 함께 실행해야 합니다. Oracle은 클라이언트-서버 버전 간 호환성이 있으므로 PHP 애플리케이션은 다른 버전의 Oracle Database에 연결할 수 있습니다.
pecl 명령을 사용하여 PECL에서 OCI8 설치
» PECL 저장소를 사용하여 기존 PHP 설치에 OCI8 확장을 추가할 수 있습니다.
-
방화벽 뒤에 있는 경우 PEAR의 프록시를 설정합니다. 예를 들면 다음과 같습니다.
pear config-set http_proxy http://my-proxy.example.com:80/
-
Run
pecl install oci8
PHP 7의 경우
pecl install oci8-2.2.0
사용 - 메시지가 표시되면
$ORACLE_HOME
값이나instantclient,/path/to/instant/client/lib
를 입력합니다.참고:
$ORACLE_HOME
또는$HOME
과 같은 변수 이름은pecl
이 확장하지 않으므로 입력하지 마십시오. 대신 확장된 경로를 입력하십시오(예:/opt/oracle/product/19c/dbhome_1
또는instantclient,/Users/myname/Downloads/instantclient_19_8
). -
oci8_dtrace_gen.h: No such file or directory
오류가 발생하면 PHP가 DTrace Dynamic Tracing이 활성화된 상태로 빌드되었음을 의미합니다. 다음을 사용하여 설치:$ export PHP_DTRACE=yes $ pecl install oci8
- php.ini 파일을 편집하고 다음 행을 추가하십시오.
extension=oci8.so
php.ini 지시문 extension_dir이 oci8.so가 설치된 디렉토리로 설정되어 있는지 확인하십시오.
phpize를 사용하여 PECL에서 OCI8 설치
pecl 명령어를 사용할 수 없을 때 기존 PHP 설치에 OCI8을 설치하려면 » PECL OCI8 패키지를 수동으로 다운로드하세요. 예: oci8-3.0.0.tgz.
- 패키지를 추출합니다.
tar -zxf oci8-3.0.0.tgz cd oci8-3.0.0
- 패키지 준비:
phpize
-
$ORACLE_HOME
또는 Instant Client를 사용하여 패키지 구성./configure -with-oci8=shared,$ORACLE_HOME
또는
./configure -with-oci8=shared,instantclient,/path/to/instant/client/lib
- 패키지 설치:
make install
-
oci8_dtrace_gen.h: No such file or directory
오류가 발생하면 PHP가 DTrace Dynamic Tracing이 활성화된 상태로 빌드되었음을 의미합니다. 이 환경 변수를 설정한 후configure
및make
명령을 다시 실행하십시오.$ export PHP_DTRACE=yes
- php.ini 파일을 편집하고 다음 행을 추가하십시오.
extension=oci8.so
php.ini 지시문 extension_dir이 oci8.so가 설치된 디렉토리로 설정되어 있는지 확인하십시오.
PHP 빌드 시 공유 확장으로 OCI8 설치
소스 코드에서 PHP를 빌드하는 경우 구성 공유 옵션을 사용하여 OCI8을 PHP에 동적으로 로드할 수 있는 공유 라이브러리로 빌드할 수 있습니다. 공유 확장을 구축하면 PHP의 나머지 부분에 영향을 주지 않고 OCI8을 쉽게 업그레이드할 수 있습니다.
다음 구성 옵션 중 하나를 사용하여 OCI8을 구성합니다.
- 무료 » Oracle Instant Client 라이브러리를 사용하는 경우 다음을 수행하세요.
./configure --with-oci8=shared,instantclient,/path/to/instant/client/lib
Instant Client 12.2(또는 이전 버전)가 ZIP 파일에서 설치된 경우 라이브러리 심볼릭 링크를 먼저 생성해야 합니다(예:
ln -s libclntsh.so.12.1 libclntsh.so
).Oracle Instant Client의 RPM 기반 설치를 사용하는 경우 구성 행은 다음과 같습니다.
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/
/client/lib 예: --with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib
Oracle Instant Client 지원은 PHP 4.3.11 및 5.0.4에서 처음 등장했으며 원래는 ----with-oci8-instant-client 옵션을 사용하여 PHP를 구성했습니다.
- Oracle 데이터베이스 또는 전체 Oracle 클라이언트 설치를 사용하는 경우 다음을 수행하십시오.
./configure --with-oci8=shared,$ORACLE_HOME
웹 서버 사용자(
nobody
,www
)가$ORACLE_HOME
디렉토리 아래에 있는 라이브러리, 초기화 파일 및 tnsnames.ora(사용되는 경우)에 액세스할 수 있는지 확인하십시오. Oracle 10gR2에서는 $ORACLE_HOME/install/changePerm.sh 유틸리티를 실행하여 디렉토리 액세스 권한을 부여해야 할 수 있습니다.
구성 후 일반적인 PHP 구축 절차를 따르십시오. e.g. make install. OCI8 공유 확장 oci8.so 라이브러리가 생성됩니다. php.ini 파일의 extension_dir 옵션으로 지정된 PHP 확장 디렉토리로 수동으로 이동해야 할 수도 있습니다.
OCI8 설치를 완료하려면 php.ini를 편집하고 다음 행을 추가하십시오.
extension=oci8.so
PHP 빌드 시 정적으로 컴파일된 확장으로 OCI8 설치하기
소스 코드에서 PHP를 빌드하는 경우 다음 구성 옵션 중 하나를 사용하여 OCI8을 정적 확장으로 포함하도록 PHP를 구성할 수 있습니다.
- Oracle Instant Client를 사용하는 경우 다음을 수행합니다.
./configure --with-oci8=instantclient,/path/to/instant/client/lib
- Oracle 데이터베이스 또는 전체 Oracle 클라이언트 설치를 사용하는 경우 다음을 수행하십시오.
./configure --with-oci8=$ORACLE_HOME
구성 후 일반적인 PHP 구축 절차를 따르십시오. e.g. make install. 컴파일이 성공하면 php.ini에 oci8.so를 추가할 필요가 없습니다. 추가 빌드 단계가 필요하지 않습니다.
Windows에 OCI8 설치
OCI8 확장은 » PECL 저장소의 DLL 또는 PHP 설치의 ext
디렉토리에 있는 라이브러리를 사용하여 기존 PHP 설치에 추가할 수 있습니다.
Oracle 12c(또는 그 이상) 라이브러리의 경우 php.ini 라인 extension=php_oci8_12c.dll
또는 extension=php_oci8_11g.dll
또는 extension=php_oci8.dll
중 하나의 주석 처리를 제거합니다. 이러한 DLL 중 하나만 한 번에 활성화할 수 있습니다. 더 높은 버전의 DLL에는 더 많은 기능이 포함될 수 있습니다. 모든 PHP 버전에서 모든 DLL을 사용할 수 있는 것은 아닙니다. extension_dir이 PHP 확장 DLL을 포함하는 디렉토리로 설정되어 있는지 확인하십시오.
Instant Client를 사용하는 경우 시스템 PATH 환경 변수를 Oracle 라이브러리 디렉토리로 설정합니다.
Oracle 환경 설정
이 확장을 사용하기 전에 웹 데몬 사용자에 대해 Oracle 환경 변수가 올바르게 설정되어 있는지 확인하십시오. 웹 서버가 부팅 시 자동으로 시작되는 경우 부팅 시 환경도 올바르게 구성되어 있는지 확인하십시오.
메모: 스크립트가 실행되기 전에 Oracle 라이브러리가 로드 및 초기화될 수 있으므로 PHP 스크립트에서 putenv()를 사용하여 Oracle 환경 변수를 설정하지 마십시오. 그러면 putenv()로 설정된 변수가 충돌, 충돌 또는 예측할 수 없는 동작을 유발할 수 있습니다. 일부 함수는 작동할 수 있지만 다른 함수에서는 미묘한 오류가 발생할 수 있습니다. 웹 서버가 시작되기 전에 변수를 설정해야 합니다.
Red Hat Linux 및 변형에서는 /etc/sysconfig/httpd의 끝에 변수를 내보냅니다. Apache 2가 있는 다른 시스템은 Apache bin 디렉토리에 있는 envvars 스크립트를 사용할 수 있습니다. 세 번째 옵션인 httpd.conf의 Apache SetEnv 지시문은 일부 시스템에서는 작동할 수 있지만 다른 시스템에서는 충분하지 않은 것으로 알려져 있습니다.
환경 변수가 올바르게 설정되었는지 확인하려면 phpinfo()를 사용하고 환경(Apache 환경이 아님) 섹션에 예상 변수가 포함되어 있는지 확인하십시오.
필요할 수 있는 변수는 다음 표에 나와 있습니다. 사용 가능한 모든 변수에 대한 자세한 내용은 Oracle 설명서를 참조하십시오.
일반적인 Oracle 환경 변수
Name | Purpose |
---|---|
ORACLE_HOME | 전체 Oracle Database 소프트웨어의 디렉토리를 포함합니다. Oracle Instant Client를 사용하는 경우에는 필요하지 않으며 설치 문제를 일으킬 수 있으므로 설정하지 마십시오. |
ORACLE_SID | 연결할 로컬 시스템의 데이터베이스 이름을 포함합니다. Oracle Instant Client를 사용하거나 항상 연결 매개변수를 oci_connect()에 전달하는 경우 이를 설정할 필요가 없습니다. |
LD_LIBRARY_PATH | 이것을 Oracle 라이브러리의 위치(예: $ORACLE_HOME/lib 또는 /usr/lib/oracle/18.5/client/lib)로 설정합니다(또는 LIBPATH 또는 SHLIB_PATH 와 같은 해당 플랫폼). Linux의 Instant Client ZIP 파일의 경우 ldconfig를 대신 사용하는 것이 더 안정적입니다. Instant Client 설치 지침을 참조하십시오. Instant Client 19(또는 그 이상) RPM 파일을 사용하면 ldconfig가 자동으로 실행됩니다. 일부 사용자는 LD_LIBRARY_PATH 대신 LD_PRELOAD 를 사용합니다. |
NLS_LANG | 이것은 Oracle 라이브러리에서 사용하는 문자 집합 및 전역화 정보를 설정하기 위한 기본 변수입니다. |
ORA_SDTZ | Oracle 세션 시간대를 설정합니다. |
TNS_ADMIN | tnsnames.ora 및 sqlnet.ora와 같은 Oracle Net Services 구성 파일이 보관되는 디렉토리를 포함합니다. oci_connect() 연결 문자열이 localhost/XE 와 같은 Easy Connect 명명 구문을 사용하는 경우 필요하지 않습니다. 네트워크 구성 파일이 /usr/lib/oracle/VERSION/client/lib/network/admin, $ORACLE_HOME/network/admin 또는 /etc와 같은 기본 위치 중 하나에 있는 경우 필요하지 않습니다. |
덜 자주 사용되는 Oracle 환경 변수에는 TWO_TASK
, ORA_TZFILE
및 NLS*
및 ORA_NLS_*
변수와 같은 다양한 Oracle 전역화 설정이 있습니다.
문제 해결
OCI8을 설치할 때 가장 일반적인 문제는 Oracle 환경이 올바르게 설정되지 않은 것입니다. 이것은 일반적으로 oci_connect() 또는 oci_pconnect()를 사용하는 문제로 나타납니다. 이 오류는 정의되지 않은 함수 oci_connect() 호출과 같은 PHP 오류, ORA-12705와 같은 Oracle 오류 또는 Apache 충돌일 수 있습니다. Apache 로그 파일에서 시작 오류를 확인하고 위의 섹션을 참조하여 이 문제를 해결하십시오.
ORA-12154 또는 ORA-12514와 같은 네트워크 오류는 Oracle 네트워크 이름 지정 또는 구성 문제를 나타내지만 근본 원인은 PHP 환경이 잘못 설정되고 Oracle 라이브러리가 tnsnames.ora 구성 파일을 찾을 수 없기 때문일 수 있습니다.
Windows에서 PHP가 올바른 버전의 Oracle만 사용하도록 주의를 기울이지 않는 한 한 시스템에 여러 버전의 Oracle이 있으면 쉽게 라이브러리 충돌이 발생할 수 있습니다.
찾고 로드되는 라이브러리를 검사하는 유틸리티는 특히 Windows에서 누락되거나 충돌하는 라이브러리 문제를 해결하는 데 도움이 될 수 있습니다.
참고: 웹 서버가 시작되지 않거나 시작 시 충돌하는 경우
Apache가 pthread 라이브러리와 연결되어 있는지 확인합니다.
# ldd /www/apache/bin/httpd libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000) libm.so.6 => /lib/libm.so.6 (0x4002f000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000) libdl.so.2 => /lib/libdl.so.2 (0x4007a000) libc.so.6 => /lib/libc.so.6 (0x4007e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
libpthread가 목록에 없으면 Apache를 다시 설치합니다.
# cd /usr/src/apache_1.3.xx # make clean # LIBS=-lpthread ./config.status # make # make install
UnixWare와 같은 일부 시스템에서는 libpthread 대신 libthread입니다. PHP와 Apache는 EXTRA_LIBS=-lthread로 구성해야 합니다.