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



last updated
2002/10/13

counter hits
since 1999/11/06


PHP4.2.2+Oracle8iのインストール(DSO版)

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

caution2002/09/06付でPHP 4.2.3がリリースされました(藤本さんによるChangeLogの和訳)が、HTMLフォームから配列データを正しく取得できないというバグがあります。使用する場合は、PHP-usersに流れたパッチを適用して下さい。

alertPHP-usersでも頻出していますが、PHP4.2.0から外部変数(環境変数、HTTP リクエスト、クッキー、ウェブサーバの情報)は、もはやデフォルトではグローバルスコープではありません(php.iniのregister_globalsがOff)。つまり、GET、POSTされたデータを「$xxxx」の形で受け取ることは、デフォルトではできません。この場合、PHP4.1.0から導入されたスーパーグローバル変数($_GET、$_POSTなど)を使用することが推奨されています。詳細は、PHPユーザー会のページをどうぞ

OracleをサポートしたPHPをApache DSO(Dynamic Shared Object)としてのインストール手順を示します。基本的な手順はPHP3.0.xと変わりませんが、念のため。。。

なお、php.iniには従来php.ini-distを使用していましたが、php.ini-recommendedを使用するようにしています。

1.Apacheのインストール

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

2.Oracleのインストール

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

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

PHP本家のサイト(http://www.php.net/)からソースを取得します。最新版は(2002/10/08現在)は、PHP4.2.3ですが、HTMLフォームから配列データを正しく取得できないというバグがありますので、PHP.4.2.2を使いました。php-4.2.2.tar.gzをダウンロード・展開後、php-4.2.2ディレクトリに移動します。GNU tarの場合、以下のコマンドです。

$ tar zxf php-4.2.2.tar.gz
$ cd php-4.2.2/

4.PHPのconfigure

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

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

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

$ ./configure --with-apxs=/usr/local/apache/bin/apxs \  (*1)
--with-oci8=/u01/app/oracle/product/8.1.6 \  (*2)
--enable-sigchild \  (*2)
--enable-mbstring \  (*3)
--enable-mbstr-enc-trans \  (*3)
--enable-mbregex \  (*3)
--without-mysql  (*4)

memoOracle関数をサポートする場合は、「--with-oracle=[ORACLE_HOMEのパス]」を指定します

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

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

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

                :
    108 output_handler = mb_output_handler
                :
    253 display_errors = On
                :
    866 mbstring.internal_encoding = EUC-JP(アンコメント)
    867 mbstring.http_input = auto(アンコメント)
    868 mbstring.http_output = SJIS(アンコメント)
    869 mbstring.detect_order = auto(アンコメント)
    870 mbstring.substitute_character = none;(アンコメント)
                :

caution[2002/10/13] 以前「allow_call_time_pass_reference = On」も追加していましたが、個人的にオブジェクトやリソースの参照渡しが必要だったために「On」にしていました。「今後のバージョンで廃止されそうな雰囲気」のようですので、基本は「Off」でプログラミングした方が良いです。PHP-usersにも情報があります。

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/8.1.6
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との連携を行う場合、 「PHPスクリプトの文字コード = mbstring.internal_encodingの文字コード = NLS_LANGの文字コード」 と指定することで、PHPスクリプトとDBから取得した文字での文字化けを防ぐことができます。これは、PHP3国際化版と異なりソースコードの自動認識をしないためです。また、mbstring.internal_encodingは基本的にOSのデフォルトの文字コードにしないと「表」などのshift_jisで「0xC5」が含まれる文字で文字化けする可能性があります。

これを/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 - 2002 by Hideyuki SHIMOOKA all rights reserved.