Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2005/02/12

counter hits
since 1999/11/06


PHP4.3.0+Oracleのインストール(DSO版)

晴れて2002年末にPHP4.3.0正式版がリリースされました。PHP4.2.x系と比べ、大幅な機能UP・バグ修正がなされています。また、日本PHPユーザー会の藤本さんが配布されていた通称「国際化版PHP4」と呼ばれていたパッチが本家のソースにマージされたことにより、本家から配布されているソースが実質的に「国際化版」になっています。が、これに伴い、追加・変更・削除されたオプション等がありますので、念のため、このインストールのページを作りました。

ここでは、国際化版ではないPHP4.2.x系とのインストール手順の違いを中心に、OCI関数をサポートしたPHP4.3.0をApache DSO(Dynamic Shared Object)としてのインストール手順を示します。基本的な手順はPHP4.2.x系と変わりませんが。。。

1.Apacheのインストール

Apacheのインストールのページを参照して、DSOをサポートするようインストールしてください。

2.Oracleのインストール

実際の手順は、Oracleのインストールガイドにお任せします(^^;
インストールのポイントについては、「Oracle製品は何をインストールすればいい?」「Oracle製品は何をインストールすればいい? - Oracle9i編」にまとめてありますので、参照してみてください。

3.PHPのソースを入手・展開

PHP本家のサイト(http://www.php.net/)からソースを取得します。最新版は(2003/01/05現在)は、当然PHP4.3.0です。php-4.3.0.tar.bz2をダウンロード・展開後、php-4.3.0ディレクトリに移動します。GNU tarの場合、以下のコマンドです。

$ tar jxf php-4.3.0.tar.bz2
$ cd php-4.3.0/

4.PHPのconfigure

ここで、OCI関数サポートのオプションを付け、configureスクリプトを実行します。今回は、以下のオプションを付けましたが、その他のオプションはお好みにより付けて下さい。

  • PHPをApache DSO版にする(*1)
  • PHPでOCI8関数をサポートする(*2)
  • マルチバイト文字列関数(mbstring)、マルチバイト正規表現関数(mbregex)をサポートする(*3)
  • Zendエンジンをマルチバイトサポートさせる(*4)
  • デフォルトで組み込まれるMySQLサポートを外す(*5)

。。。と、今までと同じようですが、指定するオプションが若干変わっていて、「--enable-mbstr-enc-trans」オプションが廃止されました。その代わり、php.iniの「mbstring.encodingtranslation」で指定するようになりました。また、国際化版に含まれていた「--enable-zend-multibyte」オプションが追加されています。このオプションと、以下にあるphp.iniの設定を行うことで、PHPスクリプトをShift JISで記述できるようになります

具体的なコマンドは、以下のようになります(カッコ内の数字は、上記のオプションの説明に対応しています)。

$ ./configure --with-apxs=/usr/local/apache/bin/apxs \  (*1)
--with-oci8=/u01/app/oracle/product/9.0.1 \  (*2)
--enable-sigchild \  (*2)
--enable-mbstring \  (*3)
--enable-mbregex \  (*3)
--enable-zend-multibyte \  (*4)
--without-mysql  (*5)

memo拡張モジュールをshared extensionとしてインストールする場合は、こちらを参照してみてください

cautionconfigureに失敗した場合、コンソールの最後にメッセージが表示されるので、確認してみましょう。また、ログファイルconfig.logが作成されているはずですので、こちらも確認してみましょう。このファイルには、configureスクリプトの何行目辺りにある、どういった処理を行っている時にエラーとなったかが記されています。

5.コンパイルとインストール

configureが無事終了したら、makeを実行しコンパイルを行います。コンパイルが終了したらrootユーザーとなり、インストールを実行します。

$ make
$ su
# make install

memoインストール先は、[Apacheのインストール先]/libexec となります。ここにlibphp4.soが存在するかどうか、確認しましょう(これが実体です)。

6.php.iniの設定

PHP4の設定ファイルであるphp.iniのコピー&設定を行います。php-4.3.0RC4ディレクトリにphp.ini-recommendedファイルがありますので、/usr/local/lib/php.iniとしてコピー&編集します。私の場合、以下のように修正しています(赤字の部分。先頭の数字は行番号)。

                :
    119 output_handler = mb_output_handler
                :
    282 display_errors = On
                :
   1014 mbstring.language = Japanese(アンコメント)
                :
   1019 mbstring.internal_encoding = EUC-JP(アンコメント)
                :
   1022 mbstring.http_input = auto(アンコメント)
                :
   1026 mbstring.http_output = SJIS(アンコメント)
                :
   1033 mbstring.encoding_translation = On(アンコメント&修正)
                :
   1037 mbstring.detect_order = auto(アンコメント)
                :
   1041 mbstring.substitute_character = none;(アンコメント)
                :
   1051 mbstring.func_overload = 0(アンコメント)
                :

また、PHPスクリプトのエンコーディングにShift JISを使う可能性がある場合は、php.iniに以下の行を追加します。

mbstring.script_encoding = auto

7.httpd.confの設定

[Apacheのインストール先]/conf/httpd.confを編集し、PHPを使用可能な状態にします。以下の赤字が編集した部分です。

DirectoryIndex index.html index.php(必要であれば)
AddType application/x-httpd-php .php(アンコメント。必須)
AddType application/x-httpd-php-source .phps(必要であればアンコメント)

8.Apache起動・停止用スクリプトを作成する

Apacheを起動する際、Oracle関連の環境変数「ORACLE_HOME」「LD_LIBRARY_PATH」「PATH」 が必要になります。起動時に毎回設定するのも面倒なので、私は以下のような簡単なスクリプトを作成し、これで起動・停止を行っています(以下の例は、PHPスクリプトはEUC、OracleインスタンスはSJIS)。

#!/bin/sh

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.0.1
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORACLE_SID=orcl
export NLS_LANG=Japanese_Japan.JA16EUC
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

/usr/local/apache/bin/apachectl $1

alertOracleとの連携を行う場合、 「mbstring.internal_encodingの文字コード = NLS_LANGの文字コード」 と指定することで、PHPスクリプトとDBから取得した文字での文字化けを防ぐことができます。mbstring.internal_encodingとPHPスクリプトの文字コードが異なる場合、mbstring.script_encodingを使用する必要があります。

これを/usr/sbin/apachectlとして保存しておき、実行権限を与えておきます。

# chmod u+x /usr/sbin/apachectl

caution環境変数を変更した場合は、一度停止させて起動する必要があります(restartオプションではダメです)

9.Apacheの起動と動作確認

スクリプトを使ってApacheを起動します。

$ su -
# /usr/sbin/apachectl start

以下のようなPHPスクリプトを用意し、Oracleとの接続テストを行います。


<?php
<b>●Oracleとの接続テスト</b>
<hr>
<?php
    // Oracleとの接続
    $conn = OCILogon("scott", "tiger", "orcl");

    // SQL文のparse
    $stmt = OCIParse($conn,"select * from emp ");

    // SQL文の実行
    OCIExecute($stmt);
    $ncols = OCINumCols($stmt);

    echo "<TABLE BORDER='1'>";
    echo "<TR>";
    for ( $i = 1; $i <= $ncols; $i++ ) {
        $column_name  = OCIColumnName($stmt,$i);
        echo "<TH>" . $column_name . "</TH>";
    }
    echo "</TR>";

    // データのFetch
    while(OCIFetch($stmt))
    {
        echo "<TR>";
        for ( $i = 1; $i <= $ncols; $i++ ) {
            $column_name  = OCIColumnName($stmt,$i);

            // データの表示
            echo "<TD>" . OCIResult($stmt, $column_name) . "</TD>";
        }
        echo "</TR>";
    }

    echo "</TABLE>";

    // リソースの解放
    OCIFreeStatement($stmt);

    // Oracleから切断
    OCILogoff($conn);
?>

ブラウザからアクセスしてみて、以下のようにテーブルの内容が表示されればOKです。

Apacheの起動確認


About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2005 by Hideyuki SHIMOOKA all rights reserved.