[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 メーリングリストの案内