PHPのお勉強!

PHP TOP

インストール手順

OCI8 とともに PHP を構成する

OCI8 を構成する前に前述の 要件 節に 目を通してください。

Web サーバーを開始する前に、一般的に OCI8 はいくつかの Oracle 環境変数(下記参照)が必要です。 それらはライブラリの場所を指定したり、構成ファイルを指示したり、 Oracle ライブラリで使用する文字セットのような基本的ないくつかのプロパティを設定します。 あらゆる PHP プロセスが開始される 前にそれらの変数を設定しなければいけません。

PHP を構成したのと同じか、またはより最新の Oracle ライブラリのメジャー・バージョンとともに PHP バイナリをリンクしなければいけません。 例えば Oracle 19 ライブラリで OCI8 をビルドするなら、 PHP も Oracle 19 ライブラリとともにデプロイして実行すべきです。 PHP のアプリケーションは、それ以外のバージョンの Oracle データベースにも接続できます。 Oracle のクライアントとサーバーの間には、異なるバージョン間での互換性があるからです。

OCI8 を PECL から(pecl コマンド経由で) インストールする

OCI8 拡張モジュールは、 » PECL リポジトリを使えば 既存の PHP のインストールに追加できます。

以下の手順で、自動インストールを行えます

  • ファイアウォールの後ろにいる場合、以下のようにしてプロキシを設定します:

    pear config-set http_proxy http://my-proxy.example.com:80/
    

  • 以下を実行します。

    pecl install oci8
    

    PHP 7 以降では、pecl install oci8-2.2.0 とします。

  • プロンプトが出たら、 $ORACLE_HOME または、 instantclient,/path/to/instant/client/lib を入力して下さい。

    注意: $ORACLE_HOME という値を入力しないで下さい。 pecl はそれを展開しないからです。 代わりに、展開済みのパスを入力するようにして下さい。 たとえば、/opt/oracle/product/19c/dbhome_1instantclient,/Users/myname/Downloads/instantclient_19_8 のようなものです。

  • oci8_dtrace_gen.h: No such file or directory というエラーが発生した場合、 PHP が DTrace を有効にしてビルドされているということです。 この場合、以下のようにしてインストールして下さい:

    $ export PHP_DTRACE=yes
    $ pecl install oci8
    

  • php.ini ファイルを編集し、以下の一行を追加して下さい。

    extension=oci8.so
    

    php.ini のディレクティブ extension_diroci8.so をインストールしたディレクトリを差しているかを確認して下さい。

OCI8 を PECL から(phpize 経由で) インストールする

pecl コマンドが利用できない場合に、 OCI8 を既存の PHP のインストールに追加するには、 » 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 を有効にしてビルドされているということです。 この場合、以下のようにして環境変数を設定してから、 configuremake を再実行して下さい。

    $ export PHP_DTRACE=yes
    

  • php.ini ファイルを編集し、以下の一行を追加して下さい。

    extension=oci8.so
    

    php.ini のディレクティブ extension_diroci8.so をインストールしたディレクトリを差しているかを確認して下さい。

PHP をビルドする際に、OCI8 を共有ライブラリとしてインストールする

PHP をソースコードからビルドしている場合、 OCI8 を共有ライブラリとしてビルドするために shared オプションが使えます。 これを使うと、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 のようにします。

    RPM を使って Oracle Instant Client をインストールしている場合、 configure コマンドは、以下のようになるでしょう:

    ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/<version>/client/lib
    

    --with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib のようにして、オプションを指定します。

  • Oracle Database を使っているか、 Oracle Client が完全にインストールされている場合は、以下のようにします:

    ./configure --with-oci8=shared,$ORACLE_HOME
    

    Webサーバーのユーザ (nobody, www) が、ライブラリへのアクセス権を持っていることを確認して下さい。 $ORACLE_HOME 内にある初期化ファイルと (もし使っていれば) tnsnames.ora です。 Oracle 10gR2 を使っている場合、 ディレクトリアクセスを与えるために $ORACLE_HOME/install/changePerm.sh を実行する必要があるかもしれません。

設定が終わった後は、いつもの PHP のビルドの手続きに従って下さい。 たとえば make install コマンドの実行です。 OCI8 の共有ライブラリ oci8.so が作成されます。 このファイルは、PHP の extension ディレクトリに手動で移動する必要があるかもしれません。 このディレクトリは、php.iniextension_dir で指定します。

OCI8 のインストールを完了するには、 php.ini を編集し、以下の一行を追加します。

extension=oci8.so

PHP をビルドする際、OCI8 を静的リンクしてインストールする

PHP をソースコードからビルドしている場合、 以下の configure オプションを使って、 OCI8 を静的ライブラリとして PHP に含めることが出来ます。

  • Oracle Instant Client を使っている場合、以下のようにします:

    ./configure --with-oci8=instantclient,/path/to/instant/client/lib
    

  • Oracle Database を使っているか、 Oracle Client が完全にインストールされている場合は、以下のようにします:

    ./configure --with-oci8=$ORACLE_HOME
    

設定が終わった後は、いつもの PHP のビルドの手続きに従って下さい。 たとえば make install コマンドの実行です。 コンパイルが終わった後は、 oci8.sophp.ini に追加する必要はありません。 追加のビルドステップも不要です。

Windows で OCI8 をインストールする

OCI8 拡張モジュールは、 » PECL リポジトリのDLLや、 インストールされた PHP の ext ディレクトリにあるライブラリを使うことで追加出来ます。

Oracle 12c (以降) のライブラリを使う場合、 php.iniextension=php_oci8_12c.dll, extension=php_oci8_11g.dll, extension=php_oci8.dll のいずれかをコメントアウトして下さい。 これらの DLL のうち、ひとつだけを1度に有効にできます。 バージョンが上のDLLには、より多くの機能が含まれています。 必ずしも全てのDLLが、全てのバージョンのPHPで利用できるとは限りません。 extension_dir が、PHP の拡張モジュールの DLL を含んだディレクトリを指していることを確認して下さい。

もし Instant Client を使用する場合、システムの PATH 環境変数を Oracle ライブラリ・ディレクトリに設定します。

Oracle の実行環境を設定する

この拡張モジュールを使用する前に、 Web デーモンのユーザーのために Oracle の環境変数が 適切に設定されたか確認してください。 もし Web サーバーがブート時に自動起動される場合は、ブート時の環境も正しく設定されていることを 確認してください。

注意:

PHP スクリプトで putenv() を使って Oracle の環境変数を 設定しないでください。それは、スクリプトが実行される前に Oracle のライブラリがロードされて 初期化されるかもしれないからです。 putenv() で変数を設定すると、コンフリクト、クラッシュ、 または予測出来ない動作の原因となるかもしれません。 ある関数は動作し、他の関数は捉えがたいエラーを示すかもしれません。 Web サーバー開始に変数を設定するべきです。

Red Hat Linux と変種では、 /etc/sysconfig/httpd の最後で変数を export してください。 Apache 2 を伴う他のシステムでは Apache bin ディレクトリーで envvars スクリプトを使用するかもしれません。 3番目のオプション、 httpd.conf の Apache SetEnv ディレクティブは、一部のシステムでは