본문 바로가기
PHP

Linux 및 Windows용 PHP 및 Oracle Instant Client 설치

by 씨엔아이소프트 2023. 9. 7.
반응형

Linux 및 Windows용 PHP 및 Oracle Instant Client 설치

Christopher Jones
April 1, 2012

원격 Oracle Database에 액세스하도록 PHP를 구성하는 가장 쉬운 방법은 Oracle Instant Client 라이브러리를 사용하는 것입니다. 이 노트에서는 Windows 및 Linux에서 OCI8 Extension 및 Oracle Instant Client를 사용하여 PHP를 설치하는 방법에 대해 설명합니다. 무료 The Underground PHP and Oracle Manual에서는 다른 설치 옵션에 대해 설명하고 더 자세한 정보를 제공합니다.

OCI8는 Oracle Database에 접속하기 위한 PHP 확장입니다. OCI8는 오픈 소스이며 PHP에 포함되어 있습니다. 이 이름은 Oracle Database 버전 8에서 처음 도입된 Oracle C "call interface" API에서 파생됩니다. OCI8는 Oracle Instant Client와 같은 Oracle 클라이언트 라이브러리에 링크됩니다.

Oracle Instant Client는 프로그램이 로컬 또는 원격 Oracle Database 인스턴스에 연결할 수 있도록 쉽게 설치되는 무료 라이브러리 집합입니다. Instant Client를 사용하려면 기존 데이터베이스가 필요합니다. Instant Client에 데이터베이스가 포함되지 않습니다. 일반적으로 데이터베이스는 다른 시스템에 배치됩니다. 데이터베이스가 로컬인 경우 OCI8가 데이터베이스 라이브러리를 직접 사용할 수 있으므로 편리하고 여전히 사용 가능한 Instant Client는 일반적으로 필요하지 않습니다.

Instant Client 11g를 사용하는 경우 PHP OCI8는 Oracle 9.2, 10.x 및 11.x 데이터베이스의 모든 버전에 연결됩니다.

소프트웨어 요구 사항

소프트웨어 참고
Oracle Instant Client "기본" 패키지를 다운로드합니다. Linux에서는 "SDK" 또는 "devel" 패키지도 다운로드합니다. 공간이 프리미엄에 있으면 Basic 대신 Basic Lite 패키지를 사용할 수 있습니다.
Apache HTTP Server 버전 2.2
PHP(PHP) 버전 5.4

Windows에서 PHP OCI8 확장 사용

Instant Client 바이너리는 Windows용 PHP의 사전 작성 바이너리를 보완합니다.

  • httpd.apache.org/download.cgi에서 httpd-2.2.22-win32-x86-no_ssl.msi을 다운로드하여 Apache 설치
MSI 파일을 두 번 클릭하여 설치 마법사를 시작합니다.

포트 80에 "모든 사용자용"을 설치합니다. 기본 대상 폴더 C:\Program Files\Apache Software Foundation\Apache2.2에 일반적인 설치를 수행합니다.

  • httpd.apache.org/download.cgi#mod_fcgid에서 FastCGI 구성 요소 mod_fcgid-2.3.6-win32-x86.zip 다운로드
  • 설치된 Apache 2.2 디렉토리에 압축을 풉니다. 이제 C:\Program Files\Apache Software Foundation\Apache2.2\modules 디렉토리에 mod_fcgid.so  mod_fcgid.pdb 파일이 있어야 합니다.
  • C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf를 편집하고 다음 행을 추가합니다.
    LoadModule fcgid_module modules/mod_fcgid.so
  • httpd.conf에서 htdocs에 대한 섹션을 찾고 Options에 ExecCGI를 추가합니다.
    <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
    ...
    Options Indexes FollowSymLinks ExecCGI
    ...
    </Directory>
      
  • Install PHP by downloading PHP 5.4.0 "VC9 x86 Non Thread Safe" ZIP package php-5.4.0-nts-Win32-VC9-x86.zip from windows.php.net/download.
  • Windows 탐색기에서 PHP 패키지를 C:\php-5.4.0 라는 디렉토리에 압축 해제합니다.
  • C:\php-5.4.0에서 php.ini-development을 php.ini 로 복사합니다.
  • php.ini를 편집하여 다음과 같이 변경합니다.
    • 다음과 같이 시간대 행을 추가합니다. date.timezone = America/Los_Angeles 로컬 시간대 이름을 사용합니다.
    • extension_dir = C:\php-5.4.0\ext 행을 추가합니다.PHP 확장자를 포함하는 디렉토리입니다.
    • 행의 시작 부분에서 세미콜론을 제거합니다. extension=php_oci8_11g.dll
  • C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf를 편집하고 다음 행을 추가합니다. '\' 백슬래시가 아닌 '/' 슬래시를 사용해야 합니다.
    FcgidInitialEnv PHPRC "c:/php-5.4.0"
    AddHandler fcgid-script .php
    FcgidWrapper "c:/php-5.4.0/php-cgi.exe" .php
    
  • OTN Instant Client 페이지에서 "Windows용 인스턴트 클라이언트 패키지 - 기본" 다운로드 PHP는 32비트이므로 Instant Client의 32비트 버전을 사용합니다.Instant Client 파일의 압축을 C:\instantclient_11_2에 풉니다.
  • Windows PATH 환경 설정을 편집하고 C:\instantclient_11_2를 추가합니다. 예를 들어 Windows XP에서 Start(시작) -> Control Panel(제어판) -> System(시스템) -> Advanced(고급) -> Environment Variables(환경 변수)를 수행하고 System variable(시스템 변수) 목록에서 PATH를 편집합니다.일반적으로 새 환경이 올바르게 설정되도록 Windows를 재부팅해야 합니다.Instant Client에서 필요하지 않은 ORACLE_HOME  ORACLE_SID와 같은 Oracle 변수의 설정을 해제합니다.
  • 컴퓨터에 다른 Oracle 소프트웨어가 있는 경우 Windows 환경을 수정하는 대신 이러한 값을 설정하고 Apache를 시작하는 스크립트를 작성합니다. 그렇지 않으면 버전 차이로 인해 라이브러리 기호 충돌이 발생할 수 있습니다.
  • 원하는 Oracle 전역화 언어 환경 변수(예: NLS_LANG)를 설정합니다. 아무것도 설정하지 않으면 기본 로컬 환경으로 간주됩니다. 자세한 내용은 The Underground PHP and Oracle Manual에서 Globalization 장을 참조하십시오.
  • 시스템 트레이 Apache Monitor 또는 Start 메뉴 옵션을 사용하여 Apache를 다시 시작합니다.

Linux에서 PHP OCI8 확장 사용

Linux에서 PHP는 일반적으로 수동으로 컴파일됩니다. 번들된 버전 nevers가 최신으로 보입니다. 그러나 PHP를 재컴파일하지 않으려는 경우 Oracle Linux용 최신 지원되지 않는 RPM 패키지는 oss.oracle.com 또는 Unbreakable Linux Network 업데이트를 통해 제공됩니다. 지원되는 PHP 환경을 원하는 경우 Zend Server를 사용하십시오. 모두 OCI8 확장자가 미리 작성되어 있습니다.

소스 코드에서 PHP 및 OCI8를 빌드하려면:

  • Apache HTTP Server 설치 및 개발 패키지(예: yum install httpd httpd-devel 사용)
  • PHP 5.4 소스 코드를 다운로드하고 PHP 설명서의 Unix 시스템에 설치 후 PHP를 설치합니다.이 단계에서는 OCI8 확장자를 구성하지 마십시오.
  • OTN 인스턴트 클라이언트 페이지에서 기본 및 SDK 인스턴트 클라이언트 패키지를 다운로드합니다. zip 파일 또는 RPM을 사용할 수 있습니다.RPM을 루트 사용자로 설치합니다. 예를 들면 다음과 같습니다.첫번째 RPM은 Oracle 라이브러리를 /usr/lib/oracle/11.2/client64/lib에 넣고, 두번째 RPM은 /usr/include/oracle/11.2/client64에 헤더를 만듭니다.ln -s libclntsh.so.11.1 libclntsh.so
  • ZIP 파일을 사용하는 경우 SDK는 기본 패키지와 동일한 디렉토리에 압축이 풀리고 수동으로 생성된 심볼릭 링크를 제거해야 합니다.
  •   rpm -Uvh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm 
    rpm -Uvh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm 
    
  • PECL의 최신 OCI8 확장은 항상 현재 버전입니다. 그것은 일반적으로 최신 PHP 5.4 소스 코드와 동기화, 그것은 때때로 더 최신 될 수 있습니다. 최신 프로덕션 확장은 자동으로 다운로드하여 PHP에 추가 할 수 있습니다 : pecl install oci8그러면 다음이 수행됩니다.Instant Client RPM이 있는 경우 Enter을 누르면 PECL이 자동으로 oci8.so 공유 라이브러리를 빌드하고 설치합니다. Instant Client zip 파일이 있거나 특정 버전의 Instant Client를 사용하려면 "instantclient," 뒤에 적절한 경로를 명시적으로 지정합니다.instantclient,/usr/lib/oracle/11.2/client64/libPECL은 환경 변수를 확장하지 않으므로 절대 명시적 경로를 사용합니다.
      tar -xzf oci8-1.4.7.tgz
    cd oci8-1.4.7
    phpize
    ./configure --with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib
    make install
    
  • pecl 프로그램이 없는 경우 브라우저에서 OCI8 패키지를 다운로드한 다음 다음을 사용하여 설치할 수도 있습니다.
  • downloading oci8-1.4.7.tgz ...
    Starting to download oci8-1.4.7.tgz (Unknown size)
    .....done: 168,584 bytes
    10 source files, building
    running: phpize
    Configuring for:
    PHP Api Version:         20100412
    Zend Module Api No:      20100525
    Zend Extension Api No:   220100525
    Please provide the path to the ORACLE_HOME directory.
    Use 'instantclient,/path/to/instant/client/lib' if you're compiling
    with Oracle Instant Client [autodetect] : 
    
  • php.ini를 편집하고 extension=oci8.so를 사용하여 OCI8 확장을 사용으로 설정합니다.또한 oci8.so 파일이 설치된 디렉토리를 가리키는 extension_dir도 확인합니다.
Instant Client 디렉토리를 /etc/ld.so.conf에 추가하거나 수동으로 LD_LIBRARY_PATH를 /usr/lib/oracle/11.2/client64/lib로 설정합니다. TNS_ADMIN  NLS_LANG와 같은 Oracle 전역화 언어 환경 변수를 설정할 수도 있습니다. NLS_LANG가 설정되지 않은 경우 기본 로컬 환경이 사용됩니다. 자세한 내용은 The Underground PHP and Oracle Manual에서 Globalization 장을 참조하십시오.

OCI8 프로세스 환경이 올바르게 초기화되도록 Apache를 시작하기 전에 모든 Oracle 환경 변수를 설정하는 것이 중요합니다. PHP 스크립트에서 환경 변수를 설정하면 분명하거나 명확하지 않은 문제가 발생할 수 있습니다. Oracle Linux에서 /etc/sysconfig/httpd의 환경 변수를 익스포트합니다. Debian 기반 시스템에서 /etc/apache2/envvars에 설정합니다.

다음과 같이 Apache를 다시 시작합니다.

service httpd restart

PHP OCI8 확장이 설치되었는지 확인

OCI8 구성을 확인하려면 Apache 문서 루트에 간단한 PHP 스크립트 phpinfo.php를 만듭니다.

<?php phpinfo(); ?>

적절한 URL(예: http://localhost/phpinfo.php)을 사용하여 스크립트를 브라우저로 로드합니다. 브라우저 페이지에는 "OCI8 Support enabled"라는 "oci8" 섹션과 구성할 수 있는 OCI8 옵션을 나열합니다.

Oracle Database에 연결

연결을 만들려면 Oracle 사용자 이름 및 암호 자격 증명이 oci_connect()의 두 매개변수로 전달됩니다. Instant Client와 연결된 프로그램은 항상 데이터베이스 서버에서 "원격"으로 간주되며 연결할 데이터베이스 인스턴스를 알려야 하므로 세번째 매개변수에 대해 Oracle Database 이름 연결 식별자를 사용해야 합니다. 접속 문자열은 설정된 Oracle 데이터베이스에서 잘 알려져 있을 수 있습니다. 새 시스템에서는 데이터베이스가 설정될 때 Oracle 설치 프로그램에서 정보를 제공합니다. 설치 프로그램이 Oracle Network를 구성하고 orcl와 같은 서비스 이름을 만들어야 합니다.

PHP에 연결 정보를 전달하는 방법은 여러 가지가 있습니다. 이 예에서는 Oracle의 Easy Connect 구문을 사용하여 mymachine에서 실행되는 orcl 데이터베이스 서비스의 HR 스키마에 연결합니다. tnsnames.ora 또는 기타 Oracle Network 파일이 필요하지 않습니다.

$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');

Easy Connect 구문은 Oracle의 Using the Easy Connect Naming Method 설명서를 참조하십시오.

새 데이터베이스에서 HR 유저와 같은 데모 스키마를 잠금 해제하고 암호를 지정해야 합니다. 이 작업은 SQL*Plus에서 SYSTEM 유저로 연결하고 다음 명령문을 실행하여 수행할 수 있습니다.

ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;

PHP OCI8 및 Oracle 사용

간단한 스크립트인 testoci.php를 사용해 보십시오. 데이터베이스에 맞게 접속 인증서를 수정하고 브라우저에 로드하십시오. 이 예제는 HR 사용자가 소유한 모든 테이블을 나열합니다.

  <?php

$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');

$stid = oci_parse($conn, 'select table_name from user_tables');
oci_execute($stid);

echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "  <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>

문제 해결

Apache 오류 로그 파일에서 시작 오류를 확인하십시오.

스크립트 오류가 표시되도록 php.ini에서 일시적으로 display_error=On를 설정합니다. 보안상의 이유로 완료되면 다시 끕니다.

The Underground PHP and Oracle Manual의 9장에는 일반적인 연결 오류에 대한 정보가 포함되어 있으며 환경 변수를 설정하는 다른 방법에 대해 설명합니다.

Oracle의 SQL*Plus 명령행 툴은 Instant Client 페이지에서 다운로드하여 환경 및 연결 문제를 해결할 수 있습니다. SQL*Plus가 접속할 수 있는지 확인한 다음 phpinfo.php의 [환경] 섹션(Apache 환경 섹션 아님)에 해당하는 환경 설정이 표시되는지 확인합니다.

Windows 특정 도움말

phpinfo.php 스크립트가 "OCI8 Support enabled"라는 "oci8" 섹션을 생성하지 않으면 php.ini에서 extension=php_oci8_11g.dll의 주석이 해제되었는지 확인합니다.

php.ini의 extension_dir 지시어가 php_oci8_11g.dll를 가진 디렉토리를 포함하지 않을 경우 Apache 시작은 "PHP 시작: 동적 라이브러리 php_oci8_11g.dll를 로드할 수 없음" 경고를 표시합니다.

PATH가 잘못 설정되었거나 Oracle 라이브러리를 찾을 수 없는 경우 Apache를 시작하면 "지정된 경로에서 동적 링크 라이브러리 OCI.dll을 찾을 수 없습니다."라는 경보가 표시됩니다. phpinfo() 페이지의 환경 섹션에는 PATH의 값과 PHP에서 실제로 사용 중인 Oracle 변수가 표시됩니다.

시스템에 여러 버전의 Oracle 라이브러리가 있는 경우 버전 충돌이 발생할 수 있습니다. 변수 설정에 대한 자세한 내용은 Using PHP OCI8 with 32-bit PHP on Windows 64-bit을 참조하십시오.

Linux 관련 도움말

Instant Client ZIP 파일을 사용하는 경우 두 패키지의 압축이 동일한 위치에 놓여 있지 않은지 확인합니다. 심볼릭 링크 libclntsh.so가 libclntsh.so.11.1를 가리키는지 확인합니다.

Apache를 시작하는 셸에서 필요한 모든 Oracle 환경 변수를 설정합니다.

결론

PECL에서 Oracle Instant Client를 사용하고 PHP OCI8를 설치하면 구성 요소를 쉽게 설치하고 업그레이드할 수 있는 유연성이 극대화됩니다.

질문 및 제안은 OTN PHP에 게시될 수 있습니다.

PHP Developer Center에는 유용한 배경 자료에 대한 링크가 포함되어 있습니다.

 

출처 : https://developer.oracle.com/ko/learn/technical-articles/1481916978486-112-technote-php-instant

반응형

'PHP' 카테고리의 다른 글

xDebug 설치  (0) 2024.02.02
about:blank  (0) 2024.02.02
그누보드 session 디렉토리 변경  (0) 2023.07.27
멀티 PHP설치 여러가지 버전 설치  (0) 2023.01.07
php 암호화 복호화 , 간단한 암호화  (0) 2022.05.31

댓글