sinkope is not kind of paradoxical existence

🎼 🎹 🏀 🌠 🚶 👣 📷 💻 🎨 🎮 📖 and more !

ねっとりえいっと

PHPからOracleを突付いてみたい。とフト思いまして。
既存の RedHat7.2 で PHP4 動かしてるマシンに環境を作ってみようと作業を始め‥‥ようとしたんですが、Net8 を入れようにも手元の Oracle9i の媒体だとインストーラが X ありきなので、そうでない当該マシンだと入れられない。つかカーネルバージョンとかディストリビューションとか、微妙に足りなそうです。むー。
しゃーないので、昔のに付録でついてた Oracle8 for Linux の媒体から Net8 を入れようと試みました。これならコマンドラインで行けそうだ。
しかーし! 秀Termから繋いでも Cygwin から繋いでも、キャラクタ擬似ウィンドウによるラジオボタンの移動をカーソルキーで行おうとしても効かない。具体的に言うと下矢印や上矢印に無反応、右矢印だとインストーラが終了指示されたと勘違いしおる。VT100互換で行ってるハズなんだけどなぁ。当該マシンには事情でコンソール直の作業が出来ないし、telnet を通していないので SSH なクライアントからやるしかない。あ、秀Termはそういえば自PCの Cygwin 環境に telnet で入ってから SSH してるんだっけ。これを Windowstelnet でやってみっか。つワケで localhosttelnet してから 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っぽい。バインドとかラージオブジェクトとか、色々試してみるコトにしましょう。