[PHP-users 34830] PHP PEARでOracleにアクセスするにはどうすればいいでしょうか。

kondo nobuaki3.kondo @ toshiba.co.jp
2009年 11月 6日 (金) 15:56:29 JST


近藤です。

お世話になります。

Oracleが入ってないサーバAからORACLEが稼動しているサーバBにPHPでアクセス
したいと思っています。
インターネットで検索しながら試行錯誤していますが、なかなかつながらないので、
助言をいただければと思います。
PHPからOracleへのアクセスは大きく分けてPHPのコンパイル、PEARのパッケージ、
ZendFrameworkを使うの3種類あるようなことが判ったので、PHPのアップデートを
考えるとPHPをソースからコンパイルするのは避けたく、ZendFrameworkは使ったこと
が無かったのでPEARで行こうかと思い、挑戦中です。

サンプルを参考に、以下の接続プログラムを作りましたが、つながりません。
気になるのが、'oci8://ユーザ名:パスワード@IPアドレス:ポート番号/DB名';
と指定しているのにMDB2::connect($dsn)すると、エラーが
「** oci8(oci8)://DB名:xxx @ IPアドレス:ポート番号/DB名"」
となることです。
何故かユーザ名がDB名に置き換わってます。

どうすれば接続できますでしょうか?
助言の方をよろしくお願いします。

■接続テストプログラム
<?php
require_once 'MDB2.php';

$dsn = 'oci8://ユーザ名:パスワード@IPアドレス:ポート番号/DB名';

$mdb2 =& MDB2::connect($dsn);
if (PEAR::isError($mdb2)) {
        //var_dump($mdb2);
        var_dump($mdb2->getuserinfo());
        die($mdb2->getMessage()."\n");
}else{
        print "Success!!\n";
        //クエリを実行します
        $res =& $mdb2->query('SELECT * FROM テーブル名');
        // 結果がエラーでないかどうかを常にチェックします
        if (PEAR::isError($res)) {
                die($res->getMessage());
        }else{
                print "Success!!\n";
        }
}
$mdb2->disconnect();
?>

■実行結果
# php test.php
string(254) "_doConnect: [Error message: unable to establish a connection]
[Native code: 12162]
[Native message: ORA-12162: TNS: 指定されたNetサービス名は正しくありません。] 

 ** oci8(oci8)://DB名:xxx @ IPアドレス:ポート番号/DB名"
MDB2 Error: connect failed

■サーバA側
・OSはRedHatEL5です。
・サーバAにはoracle-instantclient11.2をインストールしました。

・環境変数は、以下のような実行してます。
export 
PATH=$PATH:/usr/lib/oracle/11.2/client/bin/:/usr/lib/oracle/11.2/client/lib/
export NLS_LANG=JAPANESE_JAPAN.AL32UTF8
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib/
export ORACLE_HOME=/usr/lib/oracle/11.2/client/
export TNS_ADMIN=/usr/lib/oracle/11.2/client/network/admin/

※「sqlplus ユーザ名/パスワード@DB名」だと接続できます。

・/usr/lib/oracle/11.2/client/network/admin/tnsnames.oraの内容
------------------------------------------------------------
DB名 =
  (DESCRIPTION=
    (ADDRESS_LIST=
        (ADDRESS =
          (COMMUNITY=tcp.world)
          (PROTOCOL=TCP)
          (Host=IPアドレス)
          (Port=ポート番号)
        )
    )
    (CONNECT_DATA=(SID=SID)
    )
  )
------------------------------------------------------------

・PHPパッケージ
# rpm -qa | grep php・・・PHPのバージョン
php-pear-1.4.9-4.el5.1
php-pdo-5.1.6-23.2.el5_3
php-mysql-5.1.6-23.2.el5_3
php-devel-5.1.6-23.2.el5_3
php-common-5.1.6-23.2.el5_3
php-ldap-5.1.6-23.2.el5_3
php-cli-5.1.6-23.2.el5_3
php-mbstring-5.1.6-23.2.el5_3
php-5.1.6-23.2.el5_3

・PEARのインストールパッケージ
PEARのMDB2,MDB2_Driver_oci8をインストール
# pear list
Installed packages, channel pear.php.net:
=========================================
Package          Version State
Archive_Tar      1.3.1   stable
Console_Getopt   1.2     stable
DB               1.7.13  stable
MDB2             2.4.1   stable
MDB2_Driver_oci8 1.4.1   stable
PEAR             1.4.9   stable
XML_RPC          1.5.0   stable

・PHPでOCI8が認識されているか
# php -i | grep oci8
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20




PHP-users メーリングリストの案内