nkjmkzk.net

Virtualization, Operating System, Storage, Cloud Computing

Archive for the ‘php’ tag

phpからASMを管理するためのパッチ

phpからOracleを操作するときは一般的にoci8というAPI群を使います。Oracleに管理者としてログインする際、sqlplusだとconnect /as sysdbaするのはご存知の通りですが、このoci8からOracleに管理者権限接続する際には下記のようにOCI_SYSDBAというフラグを立てて接続することが必要です。
$conn = oci_connect('user', 'password', 'node/service', '', OCI_SYSDBA);
同様にASMに管理者としてログインする際、sqlplusだとconnect /as sysasmすることが必要ですが、このoci8からASMに管理者権限で接続するためのOCI_SYSASMというフラグがないということに気付きました。つまり、phpからASMを管理できないじゃないか、ということになります。
こりゃ困った、ということでいろいろ悩んだ結果、phpにOCI_SYSASM接続モードを勝手に実装することにしました。結果幸運にもphpのソースをちょこっといじるだけでOCI_SYSASM接続モードのサポートをphpに組み込むことができましたのでそれをパッチとして公開しておきます。
php-sysasm.patch
phpのバージョンは5.3.2に対応していますが、多分oci8ってそれほど更新されていないと思うので他のバージョンでもそれほど古くなければ適用可能じゃないかと思います。パッチ適用及びphpのビルド、インストールは下記の手順をご参考に(configureオプションは最小限ですので適宜追加してください)。
[root@~]# tar xvfj php-5.3.2.tar.bz2
[root@~]# cd php-5.3.2/ext/oci8/
[root@~]# patch < /PATH/TO/php-sysasm.patch
[root@~]# cd ../../
[root@~]# ./configure --with-oci8
[root@~]# make
[root@~]# make install

ASMインスタンスへの接続は下記のようにOCI_SYSASMフラグを指定して接続します。

$conn = oci_connect('user', 'password', 'node/service', '', OCI_SYSASM);

without comments

Written by nkjm

June 24th, 2010 at 7:34 am

Posted in Storage

Tagged with , ,

Oracle DatabaseとphpでOPAL環境を構築する

昨日はOracle Database XEの紹介とインストール手順を解説しました。

今日はそのXEを使ってOPAL環境を構築したいと思います。OPALとはかなりマイナーな略式名称ですが、Oracle Database, PHP, Apache, Linuxで構成するWeb+DBのスタックのことです。いわゆるアレです、LAMP(Linux, Apache, MySQL, PHP)みたいなもんです。というか平たく言えばパクリでしょう。*ちなみに「P」はPHP,Python,Perlのどれか。

昨日まででLinuxとOracle Databaseのインストールは済んでいるという前提で、その同じマシンにApacheとPHPをインストール/セットアップしていきましょう。それぞれ今日現在で最新のhttpd-2.2.10とphp-5.2.8を使用します。

まずはApacheですがこれは簡単、というかとくにOPALだからといって特別な手順やオプションはありません。普通にコンパイルしてインストールします。

# tar xvfj httpd-2.2.10.tar.bz2
# cd httpd-2.2.10/
# ./configure ¥
--prefix=/srv/httpd ¥ #適当に置き換えてください
--enable-so #多分デフォルト有効なのでいらないと思われますが一応
# make
# make install

終了ーー。では次にphpのインストールへ。

# tar xvfj php-5.2.8.tar.bz2
# cd php-5.2.8/

次のコンフィグが結構ミソです。phpからOracleに接続するにはOCI (Oracle Call Interface) を使うのが一般的かつ、性能面、機能面で最適な方法と言われています。ただしこれにも2種類あって、PDO_OCIと普通のOCI8というのがあります。実際、よりup-to-dateなドライバはOCI8になります。PDO_OCIの方はMySQLやPostgreSQLに接続する際でも統一されたインターフェースを提供してくれるいわゆる抽象化ドライバです。なので一見こいつをつかっといた方が後でDBを切り替えることがあった際に便利なのですが、残念ながら最近このPDO_OCIはメンテナンスされておらず、OCI8で実装されているBugFixや機能拡張などが反映されていません。なのでOracle一筋な方は迷わずOCI8を選択してください。そしてこのOCI8を使用するにはコンフィグ時に--with-oci8オプションを指定しておく必要があります。ちなみにPDO_OCIの方は--with-pdo-ociとします。一応こいつも入れておいてやろう。

# ./configure ¥
--prefix=/srv/php ¥ #適当に置き換えてください
--with-apxs2=/srv/httpd/bin/apxs ¥ #Apacheをインストールした場所によって置き換えてください
--with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server ¥ # $ORACLE_HOMEを指定します。
--with-pdo-oci=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server ¥ # 同じく$ORACLE_HOMEを指定します。
--with-gd ¥
--with-gettext ¥
--disable-short-tags ¥
--enable-pdo ¥
--enable-mbstring ¥
--enable-exif ¥
--enable-sigchild

これでOK。ビルドしていきます。

# make
# make install

これでバイナリがインストールされました。次に設定ファイルを作成します。テンプレートがあるのでそれをコピーして少しだけ編集(追記)します。

# cp php.ini-recommended /srv/php/lib/php.ini
# vi /srv/php/lib/php.ini
extension_dir=/srv/php/lib/php/extensions/no-debug-non-zts-20060613
extension=oci8.so

あと、httpd.confにも少し手を入れます。以下を最後の方にでも追記してください。

# vi /srv/httpd/conf/httpd.conf
AddType application/x-httpd-php .php 
AddType application/x-httpd-php .phtml 
AddType application/x-httpd-php-source .phps 

これでOKです。なお、今更ですがSE Linuxとかが有効になっているとphpのモジュールをロードする際にエラーになっていまうので/etc/selinux/configでSELINUX=disabledにしておいてください。もうこれで使える状態にあるのですが、実はこのphpのソースにバンドルされているOCI8は結構古かったりします。気持ち悪いので最新版にアップデートしておきたいところです。というわけでPECLから最新のソースをとってきます。

# wget http://pecl.php.net/get/oci8-1.3.4.tgz
# tar xvfz oci8-1.3.4.tgz
# cd  oci8-1.3.4/
# /srv/php/bin/phpize
# ./configure --with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
# make
# make install

これでばっちりです。最新のモジュールが/srv/php/lib/php/extensions/no-debug-non-zts-2006061にインストールされました。あとはapachectl startするだけです。ちなみに一応ちゃんとOCI8がインストールされているか確認するためにphpinfo()を活用しましょう。Apacheのドキュメントルートに以下の様にファイルを作成します。

# vi /srv/httpd/htdocs/phpinfo.php
<?php
phpinfo();
?>

そしてこのサーバにアクセスしましょう。

http://あなたのIPアドレス/phpinfo.php

するとこんな画面が出てくるはずです。

下の方にスクロールしていき・・・

ありましたね。よかったよかった。ひとまずこれでセットアップは完了です。

ちなみに今回のようなOPAL環境の構築について、佐藤さんがいち早く良いドキュメントを紹介されています。

http://www.oracle.com/technology/tech/php/pdf/underground-php-oracle-manual.pdf

英語にはなってしまうのですがこれははっきり言ってかなりの良書です。Oracle好きだけどJavaはちょっと、という僕のような人にはたまらない感じです。

without comments

Written by nkjm

December 14th, 2008 at 7:49 pm

Posted in Database

Tagged with , ,