2008年7月25日

PHPとOracleの連携

イントラ用に同一サーバー内のPostgreSQLと連携するPHPスクリプトを活用していたりはするんだけど、PostgrSQLは自分で作ったDBにデータを流し込んで、それをPHPで抽出・表示するといった形でしか連携していない。

費用をかけてシステム化するほどでもないものだけど、その時々に求められる項目に対して自分達(実質的に1人だけ)でカスタマイズにも順応できる用途として、サーバー本体を除けばLinux・Apache・PHP・PostgreSQLと全てフリーで導入できるお手軽社内イントラシステムのできあがり。

課長は.aspが組めるので前々からMDBとの連携はあったのだけど、俺は基本を知らなくて、趣味だけでCGIやPHPを触っていただけだから、仕事でも片手間なシステム運用の為にaspを今更覚えることもできなくてPHPを使ったスクリプトに特化していった。

課長と俺がそれぞれ別々の言語でしかスクリプトを組めないので、何かがお互いにあったら直ぐに運用が止まる素敵なイントラシステム。まぁシステム部門が無くて本業と兼用している程度規模の会社ならどこでも同じようなものなんだろう。

そんな余談は置いてといて、
基幹アプリでも対応できない抽出なんかは、ACCESSのODBCを使ってOracleに接続して抽出を行っているんだけど、これにはMicrosoftOfficeProのライセンスが必要になってくる。もちろん費用もPersonalよりも余計に発生してしまう。

条件が1つだけの抽出でも、クエリを組んでフォームを作っていても、「ハイどうぞ」とは隣の子に使わせられない。そこには費用が発生する。それに対する費用対効果もない。
となると、結局はなんでもかんでも2人のどちらかに抽出作業が回ってくる。

お互いに本業でやるべき事が山積みの中で対応しなければならない。直ぐ終わる作業でもチリも積もれば結構な時間を取られている。

 

そこで、ふっと思いついたのが「PHPでOracleから抽出作業ができればACCESSいらないやん」
なんで今まで思いつかなかったんだろうと思った。

検索すれば簡単に出てくる出てくる。

そこで、会社のシステム用件にあったセットアップを探す。

Linuxは稼動しているサーバーがあるけど、システム保守を組んでいるサーバーだから余計なものを組み込むと障害発生時に対応してくれない可能性が出てくる。かといって、もう1台Linuxサーバーを立ち上げるのはナンセンス。

消去法でいくと、春先まで使用していたシステム用で使っていた2003serverがたいした仕事もせずに稼動中。
HDD障害を直すついでにRAIDも組んだサーバーだったので、Windows系でOracle連携をすることに決定。

セットアップ方法として決めたのはフリーツールのZendCore

※Oracle Instant ClientをインストールするためにはOracleにID登録して申請までしないといけなかったので面倒だったのが理由

ZendCore for Oracleには
・Oracle Instant Client
・PHP5
・Apache2

と必要なものが揃っているので、セットアップを終えれば全てOK

【ApacheとIISの両立】
セットアップしたサーバーでは既にIISでイントラ用WEBサーバーとして運用されていた。ZendCoreはIISでのセットアップもできたようだが、インストールした際に不具合が起きると面倒なのでApache2との両立として運用することにした。
両立はポート番号を変えてやれば問題なく動作する。
アクセスする際のURLはポート番号を8000としたとすると 例)192.168.0.×:8000となる。

PHPinfoを表示してoci8が表示されていればOK

後はPHPスクリプトを組んで抽出結果をHTML表示させればよい。
これでACCESS要らずの簡単Oracle抽出の出来上がり。

※SQL文がOracle用となるのでPostgreSQLと混同しないようにしないとエラー吐きまくり・・・

 

どうやらACCESSのODBC経由よりも心なしか反応が早い気がする。

トラックバックURL

このエントリーのトラックバックURL:
http://everyday-growth.com/mtblog/mt-tb.cgi/64

コメントする