インストール手順

OCI8 とともに PHP を構成

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

OCI8 エクステンションを有効にするには、オプション --with-oci8 とともに PHP を構成します。

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

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

OCI8 を共有エクステンションとしてインストール

構成 shared オプションでは、 PHP に動的にロードできるように OCI8 を共有ライブラリとしてビルドします。 共有エクステンションをビルドすることにより、 PHP のほかの部分に影響を与えることなく、 OCI8 を簡単に更新出来ます。

下記の構成オプションの一つを使って OCI8 を構成します

  • 無料の » Oracle Instant Client ライブラリを使用している場合、こうします

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

    Instant Client を ZIP ファイルからインストールした場合、例えば ln -s libclntsh.so.12.1 libclntsh.so のようにライブラリのシンボリックリンクを作成したことを確認してください。

    RPM ベースの Oracle Instant Client インストールを使った場合、 構成の行はこのようになります。

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

    例えば、 --with-oci8=shared,instantclient,/usr/lib/oracle/12.1/client/lib .

    Oracle Instant Client は PHP バージョン 4.3.11 と 5.0.4 で最初にサポートされ、 PHP を構成するために当初は --with-oci8-instant-client オプションが使用されていたことに注意してください。

  • Oracle データベース、または 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.ini ファイルの extension_dir オプションで 示される、 PHP エクステンションディレクトリに手動で移動する必要があるでしょう。

OCI8 のインストールを完了するために、 php.ini を編集して行を追加します。

extension=oci8.so

OCI8 を静的にコンパイルされたエクステンションとしてインストール

PHP の configure 時に、下記の構成オプションの一つを使って OCI8 を含めます

  • Oracle Instant Client を使用している場合、こうします

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

  • Oracle データベース、または Oracle Client のフルインストールを使用している場合、こうします

    ./configure --with-oci8=$ORACLE_HOME
    

構成後、通常の PHP ビルド処理を続行します。例えば、 make install 。 コンパイル成功後、 php.ini ファイルに oci8.so を追加する必要はありません。 追加のビルドステップは不要です。

PECL から OCI8 をインストール

既存の PHP インストール内容に、» PECL を使って OCI8 エクステンションを自動または手動で追加できます。

自動インストールでは、これらのステップを続けます。

  • もしあなたがファイアウォールの内側にいるなら、 PEAR のプロキシを設定します。例えば、

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

  • 実行します

    pecl install oci8
    

    プロンプトが表示されたら、 $ORACLE_HOME の値か、または instantclient,/path/to/instant/client/lib を入力します。

    注意: $ORACLE_HOME 変数は展開されないので入力しないでください。 代わりに、 Oracle ホーム・ディレクトリの実際のパスを入力します。

pecl コマンドが使えない場合の手動インストールでは、 PECL の OCI8 パッケージをダウンロードします。 例えば、 oci8-1.4.10.tgz

  • パッケージを解凍します。

    tar -zxf oci8-1.4.10.tgz
    cd oci8-1.4.10
    

  • パッケージを準備します。

    phpize
    

  • パッケージを構成します。 $ORACLE_HOME か、または Instant Client を使います。

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

    または

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

  • パッケージをインストールします。

    make install
    

自動または手動インストール後に php.ini ファイルを編集して、行を追加します。

extension=oci8.so

php.iniextension_dir ディレクティブを oci8.so がインストールされたディレクトリに 設定したことを確認してください。

Windows で OCI8 をインストール

Windows では、 Oracle 10gR2 クライアント・ライブラリを使用する際は、 php.iniextension=php_oci8.dll 行のコメントをはずします。 Oracle 11gR2 以降のクライアント・ライブラリを使用する際は、 extension=php_oci8_11g.dll あるいは extension=php_oci8.dll のコメントをはずします。 Oracle 12c のクライアントライブラリを使用する際は、 extension=php_oci8_12c.dll または extension=php_oci8_11g.dll または extension=php_oci8.dll を使います。 一度に有効にできるのは、これらのうちのどれかひとつだけです。 新しいバージョンの DLL のほうが、多くの機能を含んでいるでしょう。 PHP のバージョンによっては、これらの DLL がすべて含まれているとは限りません。 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 ディレクティブは、一部のシステムでは 動作するかもしれませんが、他のシステムでは不適切であることが知られています。

環境変数が正しく設定されたかチェックするには、 phpinfo() を使って Environment セクション (Apache Environment ではありません) に期待される変数が含まれるかどうかチェックしてください。

必要かもしれない変数が下記の表に含まれます。 どんな変数が使えるのかについての詳細は Oracle ドキュメントを参照してください。

一般的な Oracle 環境変数
名前 目的
ORACLE_HOME フルの Oracle データベース・ソフトウェアのディレクトリを含みます。 Oracle Instant Client を使用する際は、これを設定しないでください。 設定することは余計なことで、インストール時に問題を引き起こすかもしれませんので。
ORACLE_SID ローカルマシン上の、接続されるデータベース名を含みます。 Oracle Instant Client を使用するか、または oci_connect() に常に接続パラメータを渡す場合は、この設定は不要です。
LD_LIBRARY_PATH これ (または、 DYLD_LIBRARY_PATHLIBPATHSHLIB_PATH のような、そのプラットフォーム相当のもの) を Oracle ライブラリの場所、例えば $ORACLE_HOME/lib または /usr/lib/oracle/11.1/client/lib に設定します。 ldconfig または LD_PRELOAD のようなもので 異なる検索メカニズムでライブラリの場所を指定される場合、この変数は不要です。
NLS_LANG これは Oracle ライブラリで使用される文字セットや 国際化情報を設定するためのプライマリ変数です。
ORA_SDTZ Oracle セッションのタイムゾーンを設定します。
TNS_ADMIN tnsnames.orasqlnet.ora のような Oracle ネット・サービス構成ファイルが保持されるディレクトリを含みます。 もし oci_connect() 接続文字列が、 localhost/XE のような Easy Connect という名前の構文を使っていれば不要です。 もしネットワーク構成ファイルが $ORACLE_HOME/network/admin/etc のような既定の場所のひとつにあれば不要です。
頻度は高くありませんが、 TWO_TASKORA_TZFILE 、及び NLS*ORA_NLS_* 変数のような 様々な Oracle 国際化設定値を含む Oracle 環境変数が使用されます。

トラブルシューティング

OCI8 をインストールする際に最も一般的な問題は、 Oracle 環境が 正しく設定されないことです。通常、これは oci_connect()oci_pconnect() 使用上の問題として現れます。 このエラーは Call to undefined function oci_connect() のような PHP エラーや、 ORA-12705 のような Oracle エラー、さらには Apache のクラッシュになるかもしれません。 この問題を解決するために、起動時のエラーについて Apache のログファイルをチェックして、 上記のセクションをご覧下さい。

ORA-12154 または ORA-12514 のようなネットワークエラーは Oracle のネットワーク・ネーミングまたは構成の問題を示唆する反面、 根本の原因は、 PHP 環境が誤って設定されたことや、 Oracle ライブラリが tnsnames.ora 構成ファイルの場所を指定できないためかもしれません。

Windows では、一つのマシン上に Oracle の複数のバージョンを持つと、 PHP が Oracle の正しいバージョンだけを使用することを確認するために注意を払わない限り、 すぐにライブラリのクラッシュを引き起こします。

特に Windows 上では、どのライブラリが検索されてロードされるか調べるユーティリティは、 欠けていたりクラッシュしているライブラリの問題の解決に役立ちます。

注意: Web サーバーが開始しないか、または起動時にクラッシュする場合

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 とともに構成しなければいけません。