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



last updated
2002/06/03

counter hits
since 1999/11/06


PHP3.0.18jp3+Oracle8iのインストール(DSO版)

alertここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。

cautionPHP 3.0.xの国際化対応版の開発は(深刻なセキュリティホールの修整を除き)終了しています。

OracleをサポートしたPHPをApache DSO(Dynamic Shared Object)としてのインストール手順を示します。なお、PHPは国際化バージョンを使用します。

1.今回の環境

  • VineLinux2.1(FTP版、Apache・PHPのRPMはインストールしていない)
  • Apache1.3.20
  • PHP3.0.18jp3
  • Oracle8.1.6i EE for Linux

2.Apacheのインストール

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

3.Oracleのインストール

実際の手順は、Oracleのインストールガイドにお任せします(^^;
こちらにもポイントをまとめてみました。

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

PHP国際化プロジェクトのサイト(http://www.php.gr.jp/project/i18n/)からソースを取得します。php-3.0.18-i18n-ja-3.tar.gzをダウンロード・展開後、php-3.0.18-i18n-ja-3ディレクトリに移動します。GNU tarの場合、以下のコマンドです。

$ tar zxf php-3.0.18-i18n-ja-3.tar.gz
$ cd php-3.0.18-i18n-ja-3/

5.PHPのconfigure

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

  • PHPをApache DSO版にする
  • PHPでOracleをサポートする
  • PHPに国際化機能とマルチバイト文字対応正規表現ライブラリを組み込む

具体的なコマンドは、以下のようになります。

$ ./configure --with-apxs=[Apacheのインストール先]/bin/apxs \
              --with-oracle=[$ORACLE_HOME] \
              --enable-i18n \
              --enable-mbregex

memoconfigure --help
とすると、オプションの説明が表示されます。

memoPHP3/4を同居させるためには、PHP3、PHP4のconfigure時に「--enable-versioning」オプションを付け、それぞれmake・make installします。

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

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

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

$ make
$ su
# make install

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

7.php3.iniの設定

PHP3の設定ファイルであるphp3.iniのコピー&設定を行います。php-3.0.18-i18n-ja-3ディレクトリにphp3.ini-distファイルがありますので、/usr/local/lib/php3.iniとしてコピーします。以下の赤字が編集した部分ですが、詳細はphp-3.0.18-i18n-ja-3ディレクトリにあるREADME.i18nを参照して下さい。

    :
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
magic_quotes_gpc = Off
    :
; internationalization
i18n.http_output = SJIS
i18n.internal_encoding = EUC-JP
i18n.script_encoding = auto
i18n.http_input = auto
i18n.http_input_default = SJIS
    :

8.httpd.confの設定

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

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

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

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

#!/bin/sh

export ORACLE_OWNER=oracle
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/8.1.6
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORACLE_DOC=$ORACLE_HOME/doc
export ORACLE_TERM=vt100
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
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/assistants/jlib
export ULIMIT=`ulimit`
export LANG=C

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

alertOracleとの連携を行う場合、 「php3.iniのi18n.internal_encoding = NLS_LANGの文字コード」 と指定することで、PHPスクリプトとDBから取得した文字での文字化けを防ぐことができます。また、i18n.internal_encodingは基本的にOSのデフォルトの文字コードにしないと「表」などのshift_jisで「0xC5」が含まれる文字で文字化けする可能性があります。

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

# chmod u+x /usr/sbin/apachectl

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

10.Apacheの起動と動作確認

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

$ su -
# /usr/sbin/apachectl start

以下のようなPHP3スクリプトを用意し、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 - 2002 by Hideyuki SHIMOOKA all rights reserved.