|
2002/12/20付けでリリースされたPHP4.3.0RC4を使って、oci8やdomxmlなどの拡張モジュールをWin版と同じくphp.iniの「extension」で追加・削除できる(shared extension)ようにインストールする手順を示します。
[2003/01/06] PHP4.2.xとPHP4.3.0のインストール手順の違いを、PHP4.3.0+Oracleのインストール(DSO版)にまとめています。
shared extensionの利点ですが、当然の事ながら「動的に機能を追加・削除できる」点でしょう。php.iniの修正だけではなく、PHPスクリプト中でdl関数を私用することにより、特定のスクリプトのみ「とある拡張モジュール」を使うことができるようになります。
もっと具体的なイメージ(PHP.4.0.xから使っていた人は分かりますが)は、PHP本体に組み込まれる前のmbstring、mbregexです。
1.Apacheのインストール
Apacheのインストールのページを参照して、DSOをサポートするようインストールしてください。
2.PHPのソースを入手・展開
PHP本家のサイト(http://www.php.net/)からソースを取得します。今回はPHP4.3.0RC4を使いました。php-4.3.0RC4.tar.gzをダウンロード・展開後、php-4.3.0RC4ディレクトリに移動します。GNU tarの場合、以下のコマンドです。
$ tar zxf php-4.3.0RC4.tar.gz
$ cd php-4.3.0RC4/
3.PHPのconfigure
「./configure --help」をしてみれば分かることなんですが、extensionを指定する「--with-xxx=...」で
--with-oci8=shared,/u01/app/oracle/...
という風に「shared」を付けるだけでshared extensionとしてコンパイルされます。ただし、全てのextensionがshared extensionとしてコンパイルできるわけではないようです。 今回は、以下のオプションを付けましたが、その他のオプションはお好みにより付けて下さい。
- PHPをApache DSO版にする(*1)
- PHPでOCI8関数をサポートし、shared extensionとしてコンパイルする(*2)
- マルチバイト文字列関数(mbstring)、マルチバイト正規表現関数(mbregex)をサポートする(*3)
- Zendマルチバイトをサポートする(*4)
- DOMXMLをサポートし、shared extensionとしてコンパイルする(*5)
- デフォルトで組み込まれるMySQLサポートを外す(*6)
具体的なコマンドは、以下のようになります(カッコ内の数字は、上記のオプションの説明に対応しています)。
$ ./configure --with-apxs=/usr/local/apache/bin/apxs \ (*1)
--with-oci8=shared,/u01/app/oracle/product/8.1.6 \ (*2)
--enable-sigchild \ (*2)
--enable-mbstring \ (*3)
--enable-mbregex \ (*3)
--enable-zend-multibyte \ (*4)
--enable-dom=shared \ (*5)
--without-mysql (*6)
configureに失敗した場合、コンソールの最後にメッセージが表示されるので、確認してみましょう。また、ログファイルconfig.logが作成されているはずですので、こちらも確認してみましょう。このファイルには、configureスクリプトの何行目辺りにある、どういった処理を行っている時にエラーとなったかが記されています。
4.コンパイルとインストール
configureが無事終了したら、makeを実行しコンパイルを行います。コンパイルが終了したらrootユーザーとなり、インストールを実行します。
$ make
$ su
# make install
インストール先は、[Apacheのインストール先]/libexec となります。ここにlibphp4.soが存在するかどうか、確認しましょう(これが実体です)。
5.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
:
438 extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20020429/
:
1015 mbstring.language = Japanese(アンコメント)
:
1020 mbstring.internal_encoding = EUC-JP(アンコメント)
:
1023 mbstring.http_input = auto(アンコメント)
:
1027 mbstring.http_output = SJIS(アンコメント)
:
1034 mbstring.encoding_translation = On(アンコメント&修正)
:
1038 mbstring.detect_order = auto(アンコメント)
:
1042 mbstring.substitute_character = none;(アンコメント)
:
1052 mbstring.func_overload = 0(アンコメント)
:
ここでは、php.iniから直接shared extensionがインストールされたディレクトリを指定していますが、mbregexの時に書いたようにシンボリックリンクでもOKです。この場合、extension_dirの設定は、
:
438 extension_dir = /usr/local/lib/php/extensions/
:
になります。
configure時に「--enable-debug」を指定した場合、shared extensionのインストール先は、/usr/local/lib/php/extensions/debug-non-zts-20020429/(no-debug-...ではない)になります。
configure時に「--enable-zend-multibyte」を指定した場合、PHPスクリプトをShift_JISで記述することができます。その場合、php.iniに「mbstring.script_encoding = Shift_JIS」を追加してください。
6.httpd.confの設定とApacheの起動
こちらを参考にしてください(^-^;
7.動作確認
以下のようなPHPスクリプトを用意し、動作を確認します。以下の例は、oci8拡張モジュールのテストスクリプトですので、他の拡張モジュールの場合は別途用意してください(^-^;
まずは、php.iniから直接extensionで指定する場合のサンプルですが、PHP本体に組み込んだ場合と同じです。
<?php
<b>●Oracleとの接続テスト</b>
<hr>
<?php
$conn = OCILogon("scott", "tiger", "orcl");
$stmt = OCIParse($conn,"select * from emp ");
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>";
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);
OCILogoff($conn);
?>
PHPスクリプトでロードする場合、当該関数を使用する前にdl関数を使って拡張モジュールをロードします。
●dl関数の使用例(上記スクリプトからの差分)
<?php
:
<?php
dl("oci8.so");
$conn = OCILogon("scott", "tiger", "orcl");
:
?>
|