ヘッダーをスキップ
Oracle® Database Express Edition 2日でPHP開発者ガイド
11g リリース 2 (11.2)
B66464-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 事前準備

この章では、Oracle Database Express EditionおよびPHP環境をインストールし、テストする方法について説明します。

この章のトピックは、次のとおりです。

必要なもの

Oracle Database Express EditionおよびPHP環境をインストールするには、次のものが必要になります。

Oracle Database Express Editionのインストール

Oracle Database Express Editionをコンピュータにインストールする必要があります。このチュートリアルで使用するサンプル・データは、デフォルトでインストールされます。これがサンプル・スキーマのHRコンポーネントとなります。

Windowsに64ビット版のPHPはないため、Windowsの場合は32ビット版のOracle Database XEをインストールします。Oracle Database XEのインストール後、正しいPATH環境変数が設定されるように再起動します。

この項で説明する項目は、次のとおりです。


関連項目:


HRユーザーのロック解除

PHPアプリケーションは、HRユーザーとしてデータベースに接続します。HRアカウントを使用する前に、ロック解除が必要になる場合があります。SQL*PlusまはたSQL Developerを使用して、HRユーザーのロックを解除します。

この項で説明する項目は、次のとおりです。

コマンドラインを使用したHRユーザーのロック解除

次のコマンドラインを使用してHRユーザーのロックを解除します。

SQL> source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
SQL> sqlplus system/system_password
SQL> alter user hr identified by welcome account unlock;

ここで、system_passwordは、データベース構成時に入力したパスワードです。

SQL Developerを使用したHRユーザーのロック解除

SQL Developerを使用してHRユーザーのロックを解除する手順は、次のとおりです。

  1. SQL Developerを起動し、Oracle Databaseへの接続をオープンします。

  2. systemユーザーとしてOracleデータベースにログインします。

  3. SQLワークシートまたはSQL*Plusを開き、次のSQL文を実行します。

    alter user hr identified by welcome account unlock;
    
    イメージ
    chap2_unlock.gifの説明

Oracleデータベース・アカウントのロック解除の詳細は、『Oracle Database Express Edition 2日でデータベース管理者』の第7章「ユーザーおよびセキュリティの管理」を参照してください。


関連項目:


データベース常駐の接続プール

AnyCoサンプル・アプリケーションでは、データベース常駐の接続プール(DRCP)を使用して、多数のユーザーをサポートするためのPHPアプリケーションの拡張方法を示します。

PHPがスレッド・セーフであるとの想定はできないため、PHPはApache Webサーバーのpre-forkモデルやFastCGIなどのマルチプロセス・モードで実行されるのが一般的です。中間層にはプロセス間通信が存在しないため、アクティブPHPプロセスとアイドルPHPプロセスとの間でOracle接続を共有することはできません。DRCPが機能するのは、共有処理がデータベース・ホスト・マシンで行われるためです。そのため、複数の中間層ホストによって作成された接続リソースを共有することも可能になります。

最大のパフォーマンスを得るため、一般にPHP OCI8アプリケーションでは永続データベース接続が使用されます。PHPがアプリケーション・スクリプトの実行を終了し、その出力をWebユーザーのブラウザに送信するとき、スクリプトの背後にあるDB接続はクローズされません。接続は、まだ実行中で現在はアイドルのPHP/Apacheプロセスにキャッシュされたままになります。このPHPプロセスによる接続の再利用は、同じデータベース資格証明を使用して接続する後続のPHPスクリプト内で可能です。これはパフォーマンス面で大きな利点があります。DRCPがなかったとすると、PHPプロセスが多数存在する場合に、オープン状態のデータベース接続によってデータベース・ホストのメモリーが大量に消費される恐れがあります。各Webページ・リクエスト間に発生するユーザーの思考時間や、PHPスクリプトが非データベース操作を実行している時間など、多くの接続がアイドル状態になっている場合でも、そのような状況に陥ります。

DRCPを使用することでPHPアプリケーションは、データベース・ホストのメモリーを効率的に使用して多数のWebユーザーをサポートできます。DRCPを使用することで、データベース・リソースの使用ユーザーを、現在データベース操作を実行しているWebユーザーに限定できます。ベンチマークでは、小規模の商用Linuxデータベース・ホストを使用した場合、DRCPで何万ものWebユーザーをサポートできることが確認されました。

図2-1 DRCPなしの場合、PHPからのアイドル永続接続によってデータベース・リソースが消費される

DRCPなし

DRCPは、データベース・ホスト上でデータベース・サーバー・プロセスの小規模なプールを維持することで、そのホストのメモリー不足を克服します。これらは、すべてのPHPプロセスおよび中間層サーバーにおけるすべてのPHPデータベース接続で、必要に応じて共用できます。

図2-2 DRCPのアーキテクチャ

DRCPのアーキテクチャ

PHPスクリプトがデータベースに接続する際、使用可能なサーバー・プロセスがプールになければ、スクリプトはいずれかのプロセスが空くのを待機します。そのため、データベースが過負荷になるのを回避でき、アプリケーションも実行し続けることができます。

DRCPプールを起動すると、プールを使用するかどうかをアプリケーションで実行時に選択できるようになります。これはPHP OCI8接続文字列で指定します。通常は、存続時間が短く、似たような種類のタスクのみがDRCPを使用するようにします。バッチ・プロセスではプールは使用しないようにします。

DRCPプールは2通りの方法で使用できます。基本的な使用方法は、プロセスのみを再利用する方法です。もう1つの方法では各プロセスに関連付けられたセッション・メモリーも再利用するため、パフォーマンスがさらに向上します。PHPでは永続接続のみが後者の方法を使用します。PHPのように、各スクリプトが1つのアプリケーションの構成物であるWebアプリケーションでは、このセッション・メモリー共有で問題が発生することはほとんどありません。ただし、セッション設定(日付形式など)が予期せず保持されないよう、また、そうしたことから情報漏えいが生じないよう注意を払う必要があります。DRCPでは、プールを仮想的にサブ・パーティション可することにより、このような問題を軽減できます。

PHP OCI8アプリケーションでは、oci_pconnect()コールを使用して、永続データベース接続を作成します。oci_connect()またはoci_new_connect()を使用してOracleにアクセスすることもできます。この方法では非永続接続が作成されます。oci_new_connect()関数はコールされるたびに、トランザクション上の依存がない新規の接続リソースを返します。実行中のスクリプトが同じ接続資格証明を使用してoci_connect()関数またはoci_pconnect()関数を複数回コールした場合、これらの関数はそれぞれが同一のPHPリソースを返します。いずれの接続方法でも、各スクリプトの終了時に必要に応じてロールバックが実行されます。

これら3つの関数は、DRCPの使用有無によってもその動作に違いが生じます。

DRCPなしの場合、PHPスクリプトが完了しても永続接続はオープンの状態を維持します。同じ資格証明を使用して接続する後続のスクリプトは、その接続をすぐに再利用できます。これは速度は期待できますが、アイドル状態のプロセスも含め各PHPプロセスからの接続を維持し続ける必要があるため、データベース・ホストに十分なメモリーが必要になります。oci_connect()関数およびoci_new_connect()関数は、PHPスクリプトの終了後、その背後にあるデータベース接続を維持しません。この場合、接続確立までの時間が長くなりますが、データベース・ホストのメモリー使用の上限をアクティブのWebユーザー数に抑えることができます。

PHP接続でDRCPを使用する場合、DRCPプールにある確立済DRCPサーバー・プロセスを使用することで、3つのOCI8接続関数はいずれも恩恵を受けます。各スクリプトが終了したとき(さもなくば、それより前に)、データベース・プール・サーバーが、再利用に備えてDRCPプールに戻されます。DRCPブローカへの軽量接続が維持され、再接続のパフォーマンス向上を支援します。oci_pconnect()関数は、プロセス・セッション・メモリーを再利用するため、効率性と拡張性がさらに向上します。oci_connect()およびoci_new_connect()の各コールでは、再利用されるDRCPプール・プロセス内にOracleセッション・メモリーが再作成されます。

DRCPおよびPHPの詳細は、ホワイトペーパを参照してください。

http://www.oracle.com/technetwork/topics/php/whatsnew/php-scalability-ha-twp-128842.pdf

DRCPプールの起動

DRCPプールは、あらかじめ提供されているPL/SQL DBMS_CONNECTION_POOLパッケージを使用してSQL*Plusで管理できます。

Oracle Linuxでプールを起動するには、端末ウィンドウを開き、rootユーザーとして接続します。

# su -

次に、suでOracleアカウントに切り替えます。

# su - oracle
$ source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

SQL*PlusをSYSDBAシステム権限で実行し、DBMS_CONNECTION_POOL.START_POOL()プロシージャを起動します。

$ sqlplus / as sysdba
SQL> execute dbms_connection_pool.start_pool()

プールがデフォルト・パラメータを使用して実行されます。

プールを停止するには、次を実行します。

SQL> execute dbms_connection_pool.stop_pool()

データベースの再起動時にDRCPが実行中であった場合、プールは自動的に再起動されます。

プールのパラメータは、次のようにDBMS_CONNECTION_POOL.ALTER_PARAM()で変更できます。

SQL> execute dbms_connection_pool.alter_param(null, 'MAXSIZE', '10');

パラメータの変更後はプールを再起動する必要があります。

現在のプール設定は、Oracleのデータ・ディクショナリに問い合せることで表示できます。

select * from DBA_CPOOL_INFO;

DRCPプール全体の統計は、次で表示できます。

select * from V$CPOOL_STATS;

統計の監視を継続することで、プールのパラメータの調整方法を決定できます。

各DRCPデータベース接続では、任意の接続クラスを指定できます。PHPの接続クラスは、PHPのphp.ini初期化ファイルで構成するか、または実行時に設定します。「WindowsおよびLinuxでのPHPインストール後のタスク」を参照してください。接続クラスは、DRCPプールを様々なユース・ケースごとにパーティション化するときに役立ちます。

各接続クラスの統計を表示するには、次を使用します。

# select * from V$CPOOL_CC_STATS;

接続クラスを設定しなかった場合、DRCPプール・リソースでの共有利用が少なくなります。一般的なアプリケーションの場合、V$CPOOL_CC_STATSで、システム生成の接続クラス名が多数表示される場合は、各中間層サーバー上のPHP構成ファイルで接続クラスが正しく設定されていることを確認してください。

DRCPプールは、PHP、PerlおよびPythonで記述されたものを含め、すべての対応アプリケーション間で共有できます。SQL*Plusなど、一部のツールはDRCP対応ではありません。DRCP接続をSQL*Plusで使用した場合、V$CPOOL_CC_STATSSHAREDというクラス名のエントリが表示されます。SQL*PlusはDRCPプールのプロセスを再利用しますが、各プロセスのセッション・メモリーを再作成する必要があります。

AnyCoアプリケーションを作成して実行すると、動作中のDRCPを監視ビューで確認できます。

Apache HTTPサーバーのインストール

Apache Webサーバーは、受信したユーザー・ページ・リクエストを処理し、PHPを起動してアプリケーションのHTMLマークアップを生成します。

この項で説明する項目は、次のとおりです。

Windows XPでのApacheのインストール

PHP 5.3.6はWindowsのFastCGIモデルを使用してインストールします。Windows用のApache HTTPサーバーを入手するには、次の手順を実行します。

  1. Webブラウザに次のURLを入力します。

    http://httpd.apache.org/download.cgi
    
  2. httpd-2.2.17-win32-x86-no_ssl.msiをクリックします。

  3. ダウンロードしたファイルを一時ディレクトリ(c:\tmpなど)に保存し、ダブルクリックしてインストールします。

    ソフトウェアが、C:\Program Files\Apache Software Foundation\Apache2.2などのディレクトリにインストールされます。

    ファイル名および抽出ディレクトリは、現行バージョンに基づいて決定されます。この手順では、インストールしているバージョンのディレクトリ名を使用するようにしてください。

  4. 次のURLからApache mod_fcgid FastCGIコンポーネントをダウンロードします。

    http://httpd.apache.org/download.cgi#mod_fcgid

  5. これを、インストールしたApache 2.2のディレクトリに解凍します。

  6. C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.confを編集し、次を追加します。

    LoadModule fcgid_module modules/mod_fcgid.so
    

    httpd.confで、htdocsの<Directory>セクションを探し、OptionsにExecCGIを追加します。

    <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
    ...
    Options Indexes FollowSymLinks ExecCGI
    ...
    </Directory>
    

「スタート」メニュー・オプションを使用して、Apacheを起動できます。コンソール・ウィンドウが開き、エラー・メッセージがあれば表示されます。エラー・メッセージはC:\Program Files\Apache Software Foundation\Apache2.2\logs\error.logにも書き込まれる場合があります。

ApacheMonitorユーティリティを使用してApacheを起動することもできます。Apacheをすべてのユーザーに対するサービスとしてインストールすることを選択した場合、システム・トレイにApacheがアイコンとして表示されます。

エラーが発生した場合は、httpd.confファイルを再確認します。

LinuxでのApacheのインストール

この項では、LinuxにApache HTTPサーバーをインストールする方法について説明します。

ファイル名および抽出ディレクトリは、現行バージョンに基づいて決定されます。この手順では、インストールしているバージョンのディレクトリ名を使用するようにしてください。

Apacheは、通常すでにLinuxにインストールされているか、パッケージ・リポジトリから直接入手できます。

この項で説明する項目は、次のとおりです。

Oracle LinuxでのデフォルトHTTPDパッケージの使用

  1. Oracle Linuxで、httpdパッケージを次のようにインストールします。

    # yum install httpd
    

    または

    # up2date httpd
    
  2. PHPを手動でコンパイルする(後述)場合、httpd-develパッケージもインストールします。

    # yum install httpd-devel
    

    または

    # up2date httpd-devel
    
  3. 次を使用して、rootとしてApacheを停止します。

    # service httpd stop
    
  4. Apacheを起動するには、次を実行します。

    # service httpd start
    

LinuxでのApacheの手動インストール

この項では、LinuxにApache HTTPサーバーを手動でインストールする方法について説明します。ファイル名および抽出ディレクトリは、現行バージョンに基づいて決定されます。この手順では、インストールしているバージョンのディレクトリ名を使用するようにしてください。

Apache HTTPサーバーをインストールするには、次の手順を実行します。

  1. httpd-2.2.17.tar.bz2など、httpdサーバーをapache.orgからダウンロードします。

  2. httpd-2.2.17.tar.bz2ファイルをダウンロードしたディレクトリに移動します。

  3. rootユーザーとしてログインし、次のコマンドを実行します。

    # tar -jxvf httpd-2.2.17.tar.bz2
    # cd httpd-2.2.17
    # export ORACLE_HOME=/usr/lib/oracle/app/oracle/product/11.2.0/server
    # ./configure \
            --prefix=/usr/local/apache \
            --enable-module=so
    # make
    # make install
    

    --enable-module=soオプションは、PHPをDynamic Shared Object(DSO)としてコンパイルすることを許可します。--prefixオプションは、make installコマンドで使用されるApacheインストール・ディレクトリを設定します。

Apacheを権限のあるユーザーとしてインストールおよび実行しないようにするには、--prefix$HOME/apacheなどのディレクトリに設定します。権限のないユーザーはデフォルト・ポート80を使用できないため、インストール完了後に、httpd.confを編集しListenパラメータをApacheがリスニングするポートに変更する必要があります。

Apacheは次のapachectlスクリプトで起動できます。

# /usr/local/apache/bin/apachectl start

次を使用してApacheを停止します。

# /usr/local/apache/bin/apachectl stop

Linux上のApacheのためのOracle環境の設定

PHP OCI8を適切に動作させるため、Apacheの起動前にOracle環境を正しく設定する必要があります。一般的には、$ORACLE_HOME/bin/oracle_env.shスクリプトで設定されるものと同じ変数を設定する必要があります。必要な環境変数はApacheの環境構成ファイルで設定できます。

デフォルトhttpdパッケージを使用したOracle Linuxでは、これは/etc/sysconfig/httpdです。前の項に記載されている方法で独自でApacheをインストールした場合、/usr/local/bin/envvarsです。このファイルを編集し、次の行を追加します。

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

環境変数が適用されるように、Apacheを停止して再起動します。

Linuxでのサンプル・プロジェクトのためのユーザー・ディレクトリの設定

これから作成するPHPファイルはApacheがアクセスできるディレクトリに格納する必要があります。この場所の候補としては、Apacheのドキュメント・ルート・ディレクトリである/var/www/html (または、Apacheを手動でインストールした場合は/usr/local/apache/htdocs)が考えられます。より簡単な方法として、Apacheにホーム・ディレクトリのサブディレクトリへのアクセスを許可する方法もあります。

  1. 通常のユーザーとしてログインし、作業ディレクトリを作成します。

    mkdir $HOME/public_html
    

    Apacheプロセスがファイルにアクセスできるようにする必要があります。たとえば、次を使用します。

    chmod 755 $HOME $HOME/public_html
    
    1. Oracle Linuxの場合は、/etc/httpd/conf/httpd.confを編集し、mod_userdir.cセクションを探します。これを次のように変更します。

      <IfModule mod_userdir.c>
        #
        # UserDir is disabled by default since it can confirm the presence
        # of a user name on the system (depending on home directory
        # permissions).
        #
        #UserDir disable
        #
        # To enable requests to /~user/ to serve the user's public_html
        # directory, remove the "UserDir disable" line above, and uncomment
        # the following line instead:
        #
        UserDir public_html
      </IfModule>
      
    2. Apacheを手動でインストールした場合は、/usr/local/apache/conf/httpd.confを編集し、次の行を探します。

      Include conf/extra/httpd-userdir.conf
      

      先頭にシャープ記号(#)がある場合は、削除して非コメント化します。

  2. Apacheを再起動します。

    これにより、Webブラウザはユーザーの$HOME/public_htmlディレクトリからファイルを提供できるようになります。たとえば、'chris'としてログインして$HOME/public_htmlに作成したPHPファイルには、URL http://localhost/~chris/でアクセスできるようになります。

    PHPプロジェクト・ファイルをpublic_htmlに作成することにした場合は、これより先、マニュアルに記載されているURLを読み替える必要があります。たとえば、マニュアルでhttp://localhost/を使用するように指定されている場合は、http://localhost/~user/を使用することになります。

Apacheインストールのテスト

Apache HTTPサーバーのインストールをテストするには、次の手順を実行します。

  1. ApacheをインストールしたコンピュータでWebブラウザを起動します。

  2. 次のURLを入力します。

    http://localhost/
    

    Webブラウザに、次のようなページが表示されます。

    it works
    図chap2_test_install_013.pngの説明

    このページが表示されない場合は、Apache構成を確認します。一般的な問題としては、Apacheが実行されていない、Apacheがデフォルト以外のポートをリスニングしているなどの問題が考えられます。ポート番号は、Apacheの構成ファイル/etc/httpd/conf/httpd.conf (あるいは、/usr/local/apache/conf/httpd.confまたはC:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf)のListenパラメータで設定します。

    サイトでデフォルト以外のポート番号を使用する場合は、これより先、マニュアルに記載されているURLを読み替える必要があります。たとえば、Apacheがポート8888をリスニングする場合は、マニュアルでhttp://localhost/を使用するように指定されている場合に、http://localhost:8888/を使用することになります。

PHPのインストール

このマニュアル内のアプリケーションでは、Oracleデータベース用のOCI8 1.4拡張モジュールが含まれたPHP 5.3を使用します。PHP 5.3およびOCI8 1.4の新機能が使用されています。PHPのGD拡張モジュールは、第11章「JSONの使用とJPEGイメージの生成」で使用されます。

この項で説明する項目は、次のとおりです。

WindowsでのPHPのインストール

この項では、WindowsにPHPをインストールする方法について説明します。

ファイル名および抽出ディレクトリは、現行バージョンに基づいて決定されます。この手順では、インストールしているバージョンのディレクトリ名を使用するようにしてください。

PHPをインストールするには、管理者ユーザーである必要があります。PHPをインストールするには、次の手順を実行します。

  1. PHP 5.3.6 zipファイルを次のWebサイトからダウンロードします。

    http://windows.php.net/download/

    FastCGIモードでインストールするので、非スレッドセーフ・バンドルを使用します。

  2. Windowsのエクスプローラで、PHP 5.3.6 zipファイルをダウンロードしたディレクトリに移動します。

  3. C:\php-5.3.6というディレクトリにPHPパッケージを解凍します。

  4. php.ini-developmentC:\php-5.3.6\php.iniにコピーします。

  5. php.iniを編集して次の変更を加えます。

    • extension_dir = "C:\php-5.3.6\ext"を追加します。

      これはPHP拡張モジュールが含まれているディレクトリです。

    • 行頭のセミコロンを削除します。

      extension=php_oci8_11g.dll

  6. C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.confを編集し、次の行を追加します。必ず、バックスラッシュ(\)ではなくスラッシュ(/)を使用してください。

    FcgidInitialEnv PHPRC "c:/php-5.3.6"
    AddHandler fcgid-script .php
    FcgidWrapper "c:/php-5.3.6/php-cgi.exe" .php
    

    mod_fcgid.soがロードされ、項「Windows XPでのApacheのインストール」の説明のとおり、ExecCGIオプションが設定されていることを確認します。

  7. Apacheサーバーを再起動すると、PHPインストールのテストが可能になります。

    エラーが発生した場合は、httpd.confおよびphp.iniファイルを再確認します。PATH環境変数にOracleライブラリが含まれるようにするため、Oracle Database XEのインストール後、必ずマシンを再起動します。

LinuxでのPHPのインストール

LinuxディストリビューションにPHP 5.3パッケージが含まれている場合は、それを使用するのが最も簡単な方法です。ソース・コードからPHPをビルドすることも可能です。

この項で説明する項目は、次のとおりです。

Oracle LinuxへのPHPおよびOCI8のインストール

Oracle Linuxで、次を使用してPHP 5.3をインストールします。

# yum install php53 php53-gd

または

# up2date php53 php53-gd

Oracle Unbreakable Linux Network (ULN)に登録していない場合は、次の項「Linux上の既存のPHPへのOCI8拡張モジュールの追加」」の説明のとおり、OCI8を手動でインストールする必要があります。

ULNの登録者である場合は、Oracle Software for Enterprise Linux 5チャネルでOCI8 RPMにアクセスできます。このチャネルを追加し、次を実行します。

# yum install php53-oci8-11gR2

または

# up2date php53-oci8-11gR2

php53-oci8-11gR2パッケージをインストールすると、Oracleインスタント・クライアント・ライブラリもインストールされます。

Apacheを再起動します。エラーが発生した場合は、画面に表示されます。これらは/var/log/httpd/error_logにも書き込まれる場合があります。問題があった場合は、httpd.confおよびphp.iniを再確認します。

Linux上の既存のPHPへのOCI8拡張モジュールの追加

OCI8なしのPHP 5.3がすでにインストールされている場合は、PHPのPECLライブラリ、http://pecl.php.net/oci8を使用して最新のPHP OCI8拡張モジュールを追加できます。通常これは、OCI8をPHP 4.3.9以降に追加するときに使用できます。このマニュアルのコード例ではPHP 5.3が必要です。

phpizeコマンドなどのPHP開発ファイルが必要になります。Oracle Linuxでは、これはphp53-develパッケージに含まれています。

OCI8をインストールする手順は、次のとおりです。

  1. http://pecl.php.net/get/oci8-1.4.5.tgzをダウンロードして展開します。

  2. 次のコマンドを実行します。

    # cd oci8-1.4.5
    # phpize
    # export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
    # ./configure --with-oci8
    # make install
    

PHP OCI8は共有ライブラリとしてビルドされます。そのため、他のPHPインストール内容に干渉することなく簡単にアップグレードできます。

PHPにライブラリをロードするには、/etc/php.iniを編集し、次を追加します。

extension=oci8.so

LinuxでのPHPとOCI8の手動ビルド

この項では、Linux上でソース・コードからPHPをビルドする方法について説明します。ファイル名および抽出ディレクトリは、現行バージョンに基づいて決定されます。この手順では、インストールしているバージョンのディレクトリ名を使用するようにしてください。

この手順を実行すると、OCI8とともにPHPバイナリが静的に組み込まれます。代替手段として考えられるのは、前項の説明のとおり、OCI8なしでPHPをビルドした後、PECLからOCI8を追加する方法です。

PHPをインストールするには、次の手順を実行します。

  1. 次からPHP 5.3.6をダウンロードします。

    http://www.php.net/downloads.php

  2. rootユーザーとしてログインし、次のコマンドを実行します。

    # tar -jxvf php-5.3.6.tar.bz2
    # cd php-5.3.6
    # export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
    # ./configure \
    --with-oci8 \
    --with-apxs2=/usr/local/apache/bin/apxs \
    --with-config-file-path=/usr/local/apache/conf
    

    /usr/local/apache以外にApacheがインストールされている場合は、使用しているシステムでの適切なパスを使用します。PHPを標準外の場所(ホーム・ディレクトリの下位など)にインストールする場合は、configureを実行するときに--prefixオプションを追加します。たとえば、--prefix=$HOME/php53のようにします。

  3. PHPをビルドしてインストールします。

    # make
    # make install
    
  4. PHPで提供される初期化開発ファイルをコピーします。

    # cp php.ini-development /usr/local/apache/conf/php.ini
    
  5. Apacheの構成ファイル/usr/local/apache/conf/httpd.confを編集します。

    PHPのインストールでLoadModule行が挿入されなかった場合は、次のように追加します。

    LoadModule php5_module modules/libphp5.so
    

    次の行をhttpd.confに追加します。

    #
    # This next section will call PHP for .php files
    #
    AddType application/x-httpd-php .php
    
  6. Apacheサーバーを再起動します。

    /usr/local/apache/bin/apachectl stop
    /usr/local/apache/bin/apachectl start
    

    エラーが発生した場合は、画面に表示されます。エラーは、/usr/local/apache/logs/error_logにも書き込まれる場合があります。問題があった場合は、httpd.confおよびphp.iniを再確認します。

WindowsおよびLinuxでのPHPインストール後のタスク

PHPのインストール後、php.ini構成ファイルに次の設定が含まれていることを確認します。

  1. タイムゾーンの設定はPHP 5.3で追加された新たな要件です。

    date.timezone = America/Los_Angeles
    
  2. メッセージをApacheのログ・ファイルのみに出力するのではなく、PHPのdisplay_errorsを設定して出力テキストに表示されるようにしておくと、テストの際に便利です。php.inidisplay_errors設定を探し、必要に応じてOnに変更します。このディレクティブが存在しない場合は、次の行を追加します。

    display_errors = On
    
  3. DRCP接続クラスがphp.iniに構成されている必要があります。この名前はユーザーが選択した文字列であり、このアプリケーションとDRCPを使用する他のアプリケーションとの区別に使用されます。クラスが設定されていない場合は、OracleでDRCPプールを効率よく共有できません。

    次のようなクラス名エントリを追加します。

    oci8.connection_class = ACXE
    

    構成ファイルを保存します。

    Linuxを使用している場合は、前の項「Linux上のApacheのためのOracle環境の設定」に記載されている手順も完了していることを確認します。

  4. Apacheを再起動します。

PHPインストールのテスト

この項で説明する項目は、次のとおりです。

phpinfo()によるPHP構成の確認

最初にApacheのエラー・ファイルerror_log (/var/log/httpd、/usr/local/apache/logsまたはC:\Program Files\Apache Software Foundation\Apache2.2\logs内)で、ApacheまたはPHPの起動エラーがないことを確認します。

PHPプロジェクト・ファイルを作成する場所を決定します。このディレクトリはApacheがアクセス可能なディレクトリである必要があります。たとえばLinuxでは、Apacheのドキュメント・ルート(/var/www/html or /usr/local/apache/htdocs)または$HOME/public_html(ユーザー・ディレクトリを構成した場合)を使用します。Windowsの場合は、Apacheのドキュメント・ルートC:\Program Files\Apache Software Foundation\Apache2.2\htdocsを使用します。

エディタで、新規のPHPファイルpi.phpを作成し、次を含めます。

<?php
    phpinfo();
?>

このファイルをブラウザにロードします。

http://localhost/pi.php

次のことを確認します。

  • デフォルト以外のポート(8888など)を使用している場合は、ポートが含まれるようにURLを変更します。たとえば、http://localhost:8888/pi.phpのようにします。

  • ファイルを$HOME/public_htmlに置いた場合は、ユーザー名が含まれるようにURLを変更します。たとえば、http://localhost/~chris/pi.phpのようにします。

  • または、http://localhost:8888/~chris/pi.phpのように両方を使用します。

次のようなページが表示されることを確認します。

php

エコー・バックされたファイルのテキストが表示された場合は、ApacheがPHPファイルをPHPに送信する構成になっていません。Apacheのhttp.confファイルに、行AddType application/x-httpd-php .php(Linuxの場合)またはAddHandler fcgid-script .php(Windowsの場合)が含まれている必要があります。

phpinfo()が正常に出力された場合は、php.iniの場所とこのファイルがロードされたかどうかが表示されます。ロード済のphp.iniが表示されない場合は、これまでの手順を再度確認し、sample php.iniファイルを適切な場所にコピーし、「WindowsおよびLinuxでのPHPインストール後のタスク」の項の手順に従います。

「OCI8」セクションまでスクロールします。次のように表示されることを確認します。

php oci8

「OCI8」セクションがない場合は、OCI8をインストールしていることを確認する必要があります。共有ライブラリとしてインストールした場合は、php.iniextension=oci8.soまたはextension=php_oci8_11g.dll(Windowsの場合)があることを確認し、さらにphpinfo()の出力で、extension_dirがOCI8ライブラリがインストールされたディレクトリに設定されていることを確認します。

OracleへのPHP接続のテスト

OCI8拡張モジュールが正常に動作していることを確認するには、新規のPHPファイルtestoci8.phpを作成し、次を含めます。

<?php
 
$c = oci_connect('hr', 'welcome', 'localhost/xe');
if (!$c) {
    $m = oci_error();
    trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}
$s = oci_parse($c, "SELECT * FROM employees");
if (!$s) {
    $m = oci_error($c);
    trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}
$r = oci_execute($s);
if (!$r) {
    $m = oci_error($s);
    trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
}
$r = oci_fetch_all($s, $res);
if (!$r) {
    $m = oci_error($s);
    trigger_error('Could not fetch rows: '. $m['message'], E_USER_ERROR);
}
echo "<table border='1'>\n";
foreach ($res as $row) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "  <td>".($item!==null?htmlentities($item, 
                       ENT_QUOTES):"&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";
 
?>

<?php ?>タグ内のコードがすべてPHPによって処理され、出力がユーザーのブラウザに送信されます。タグの外側のテキストはユーザーのブラウザにそのまま送信されます。これには先行および後続の空白も含まれます。ファイルには複数のタグ・セットを含めることができます。これを利用してHTMLコンテンツ内にPHPのスニペットを埋め込むアプリケーションもあります。しかし、PHPを中心に据えたアプリケーションでは、通常PHPのechoまたはprint文を使用して、必要なHTMLタグを出力します。

OCI8関数のコールがどのように動作するかの詳細は、「PHP OCI8でSQLを実行する一般的な例」の項およびこのマニュアル内の残りの各所で説明します。

次のファイルをブラウザにロードします。

http://localhost/testoci8.php

Apacheをどのようにインストールしたかに応じて、次のいずれかを使用する必要があります。

  • http://localhost:8888/testoci8.php

  • http://localhost/~chris/testoci8.php

  • http://localhost:8888/~chris/testoci8.php

次のように表示されることを確認します。

chap2_Testing_PHP_Connections_to_Oracle.png

画面に何も表示されない場合は、php.inidisplay_errors = Onが含まれていることを確認します。ページを再ロードして、エラーが表示されるかどうかを確認します。

エラー「ORA-28000: アカウントがロックされています。」が表示された場合は、「HRユーザーのロック解除」の項の手順のとおり、HRアカウントのロックを解除します。

Linuxでの次のような起動エラー

Warning: oci_connect():OciEnvNlsCreate() failedがあった場合、ORACLE_HOMEを正しく設定したかどうかを確認してください。

「ORA-12541: TNS: リスナーがありません」のようなエラーが表示された場合は、Oracle Database XEのインストール・ログで、Oracle Database XEリスナーをインストールしたときに使用したポートを確認します。たとえば1522を使用した場合は、testoci8.php内の接続コールを次のように変更します。

$c = oci_connect('hr', 'welcome', 'localhost:1522/xe');

ORA-01017: 無効なユーザー名/パスワードのエラーが表示された場合は、oci_connect()コールを変更し、「HRユーザーのロック解除」の項でHRに割り当てたパスワードを使用します。

NetBeans 7.0 IDEのインストール

NetBeansはPHP Webプロジェクト用のIDEとして非常に人気が高く、優れたコーディング機能を備えています。HTML、JavaScript、CSSを含む様々なプログラミング言語およびマークアップ言語の編集機能がサポートされています。NetBeansの最新バージョンはPHP 5.3の言語構造に対応しています。NetBeansは、PHPフレームワークをサポートしており、PHPUnitなどのテスト用ツールとの統合およびドキュメント生成用のPHPDocumentorとの統合が可能です。PHPの開発に役立つオプションのPHPデバッガ拡張モジュールとともに構成することもできます。NetBeansにはOracleデータベースと一緒に使用できるSQLエディタも含まれています。

詳細なインストール手順は、次のURLで入手できます。

http://netbeans.org/community/releases/70/install.html

この項で説明する項目は、次のとおりです。

WindowsでのNetBeans IDEのインストール

NetBeans IDEをWindowsにインストールする手順は、次のとおりです。

  1. NetBeans 7.0とJava SE Development Kitを次の場所からダウンロードします。

    http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html

  2. Windowsのエクスプローラで、ダウンロードしたファイルjdk-6u25-nb-7_0-windows-ml.exeを探し、ダブルクリックして実行します。

  3. インストール後、「スタート」「すべてのプログラム」「NetBeans」「NetBeans IDE 7.0」の順にナビゲートして、NetBeansを起動します。

  4. 「Run Tools」から「Plugins」を選択します。

  5. 「Available Plugins」タブに移動し、「PHP」カテゴリ内のすべてのオプションを選択します。

  6. 「Install」をクリックし、使用許諾条項および場所に同意します。

  7. 要求された場合は、IDEを再起動します。

LinuxでのNetBeans IDEのインストール

NetBeans IDEをLinuxにインストールする手順は、次のとおりです。

  1. 次のWebサイトからNetBeans 7.0 PHPバンドルをダウンロードします。

    http://netbeans.org/downloads/

  2. Linuxでターミナル・ウィンドウを開き、インストーラを実行します。

    # sh netbeans-7.0-ml-php-linux.sh
    
  3. JDKがデフォルトの場所にインストールされていない場合は、次のようにインストール時にパスを指定します。

    # sh netbeans-6.9-ml-php-linux.sh --javahome $HOME/jdk1.6.0_24
    
  4. 使用許諾条項に同意します。

  5. インストール・ディレクトリを確認します。

  6. JDKの場所を確認します。

NetBeansがインストールされます。

JDKがマシンにまだインストールされていない場合は、JDKが含まれているNetBeans 7.0バンドルを次の場所からダウンロードします。

http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html

このバンドルはPHP対応になっていません。PHP対応にするには、「Tools」に移動し、「Plugins」を実行します。「Available Plugins」タブに移動し、「PHP」カテゴリ内のすべてのオプションを選択します。「Install」をクリックし、使用許諾条項および場所に同意します。要求された場合は、IDEを再起動します。

LinuxおよびWindowsでのNetBeansの構成

LinuxおよびWindowsでNetBeansを構成するには、次の手順を実行します。

  1. デスクトップ・アイコンまたはメニュー項目を使用して、NetBeansを起動します。「Tools」「Options」の順にナビゲートします。

  2. 「General」オプションで、使用するブラウザを選択します。

  3. 「PHP」オプションで、「General」タブに移動します。

  4. PHP 5インタプリタをPHPコマンドライン実行可能ファイルに設定します。たとえば、/usr/bin/php/usr/local/bin/phpまたはC:\php-5.3.6\php.exeなどです。

NetBeansの使用

新規のPHPプロジェクトを次のように作成します。

  1. 「File」「New Project」の順にナビゲートするか、「New Project」アイコンをクリックするか、[Ctrl]、[Shift]、[N]を同時に押します。

  2. 「PHP」「PHP Application」を選択します。

  3. 「Project name」をACXEに変更します。

  4. ソース・ファイルを保存するフォルダを選択します。/home/chris/public_html/ACXEなど、Apacheがアクセスできるディレクトリを使用すると、インストール作業が簡単になります。

  5. 「PHP Version」をPHP 5.3に設定します。

  6. プロジェクトURLをソースが配置されるディレクトリにマップするように設定します。たとえば、デフォルト以外のApacheポートを使用する場合は、http://localhost:8888/~chris/ACXE/のようにします。フレームワークは使用しないでください。

  7. プロジェクトが作成され、index.phpファイルがデフォルトNetBeansテンプレートに設定されます。

    netbeans
  8. 実行できるかどうかを確認するため、index.phpにコンテンツを配置します。<?php ?>タグ内のコメント行// put your code hereを、次と置き換えます。

    echo "hi";
    
  9. 「Run」から「Run Project」を選択するか、[F6]を押してファイルを実行します。ブラウザ・ウィンドウが開き、新しく追加したメッセージが表示されます。

    NetBeans
  10. URLが間違っていて、ディスク上のファイルにマップされない場合は、「Project navigator」でプロジェクト名を右クリックし、「Properties」を選択します。「Run Configuration」を選択し、プロジェクトURLを変更します。

このマニュアルの残りの部分では、「Project navigator」でプロジェクト名を選択してから、「File」「New File」の順にナビゲートする方法、または「New File」アイコンもしくは[Ctrl]と[N]を同時に押す方法で、必要に応じてACXEプロジェクトにファイルを追加します。