PHPからOracleを突付いてみたい。とフト思いまして。
既存の RedHat7.2 で PHP4 動かしてるマシンに環境を作ってみようと作業を始め‥‥ようとしたんですが、Net8 を入れようにも手元の Oracle9i の媒体だとインストーラが X ありきなので、そうでない当該マシンだと入れられない。つかカーネルのバージョンとかディストリビューションとか、微妙に足りなそうです。むー。
しゃーないので、昔の本に付録でついてた Oracle8 for Linux の媒体から Net8 を入れようと試みました。これならコマンドラインで行けそうだ。
しかーし! 秀Termから繋いでも Cygwin から繋いでも、キャラクタ擬似ウィンドウによるラジオボタンの移動をカーソルキーで行おうとしても効かない。具体的に言うと下矢印や上矢印に無反応、右矢印だとインストーラが終了指示されたと勘違いしおる。VT100互換で行ってるハズなんだけどなぁ。当該マシンには事情でコンソール直の作業が出来ないし、telnet を通していないので SSH なクライアントからやるしかない。あ、秀Termはそういえば自PCの Cygwin 環境に telnet で入ってから SSH してるんだっけ。これを Windows の telnet でやってみっか。つワケで localhost に telnet してから slogin 。お、おお!効いたよ矢印! ‥‥なんだったんだ一体。
クライアントが入ればいいので、"Do not Create DB Objects"で Net8 関連のみ(実はついでに SQL*Plus も)を選択してインストール。ん、これは問題なく入ったようです。
では早速ってンで $ORACLE_HOME/network/admin/tnsnames.ora を手で編集し(笑)、サーバに接続確認してみやう。
[oracle$ tnsping HOGE Segmentation fault [oracle]$
‥‥はい?(青
あ、ゼロか?
[oracle]$ tnsping0 HOGE TNS Ping Utility for Linux: Version 8.0.5.0.0 - Production on 26-JAN-05 16:14:15 (c) Copyright 1997 Oracle Corporation. All rights reserved. Attempting to contact (ADDRESS=(PROTOCOL=TCP)(Host=172.16.0.1)(Port=1521)) OK (50 msec) [oracle]$
あああ、ビックリした。でも sqlplus はコケますね。使えませんかね。まぁいいんですけど。
んで今度はPHPっすかね。チト古かったのでついでにバージョンを最新にすることにし、4.3.10 をダウンロード、解凍してコンフィグかける。--with-oci= ってヤツやね。$ORACLE_HOME でええのかな?
configure して make 。っととと、エラーが出ますよ? oci.h がありませんて‥‥そんなのPHPの配布物ん中に見当たらないじゃん。マウントしっぱーだった Oracle 媒体を覗いてみると、それっぽいのがあるにはある。そこでこれを ext/oci8 配下にコピーしてみた。
[root]# pwd /usr/local/src/php-4.3.10 [root]# cd ext/oci8 [root]# cp /mnt/cdrom/o8wgs/rdbms/public/*.h . [root]# cp /mnt/cdrom/o8wgs/network/public/*.h . [root]# cp /mnt/cdrom/o8wgs/plsql/public/*.h .
しかしこれだけだと
#include
みたくなってる部分で「無い」っつって怒られるので、エラーが出た部分を片っ端っから
#include "oci.h"
みたく変えて make 。お、通ったぞ(ええんか?
Oracle 以外の機能については、$ORACLE_HOME 等の環境変数を整えて、$ORACLE_HOME 配下のディレクトリへのアクセスさえ通れば(特に lib/libclntsh.so.1.0 等へたどり着けるように)、他のユーザでも PHP 自体は問題無さげ(というのは、libclntsh.so.1.0 見れないと別に Oracle の機能使ってなくても動かないのよ PHP)。
Oracle へのアクセスも基本的な動作はOKっぽい。バインドとかラージオブジェクトとか、色々試してみるコトにしましょう。