[PHP-users 30522] Miracle LinuxとOracle10gR2とPHPで環境構築
Eijun Kitamura
eijun @ hal.ne.jp
2006年 10月 15日 (日) 04:01:36 JST
北村と申します。
過去ログを検索しようとしましたが、保存書庫の検索ページがリンク切れで
調べられなかったので、もし過去に同様の質問があったらお許しください。
1台のサーバで、Miracle Linux V4にOracle 10g R2とPHPをインストールして、
システム環境構築を試みているのですが、PHPからOracleにアクセスできません。
後に記述するサンプルコードを実行すると、下記のエラーが返ってきます。
Warning: ocilogon() [function.ocilogon]: _oci_open_server: Error while trying to retrieve text for error ORA-12154 in /home/hoge/public_html/test.php on line 2
Warning: ociparse(): supplied argument is not a valid OCI8-Connection resource in /home/hoge/public_html/test.php on line 4
Warning: ociexecute(): supplied argument is not a valid OCI8-Statement resource in /home/hoge/public_html/test.php on line 6
Warning: ocinumcols(): supplied argument is not a valid OCI8-Statement resource in /home/hoge/public_html/test.php on line 7
Warning: ocifetch(): supplied argument is not a valid OCI8-Statement resource in /home/hoge/public_html/test.php on line 18
Warning: ocifreestatement(): supplied argument is not a valid OCI8-Statement resource in /home/hoge/public_html/test.php on line 33
(サンプルコード)
<?php
$conn = ocilogon("scott", "tiger", "orcl");
// SQL文のparse
$stmt = OCIParse($conn,"select * from emp");
// SQL文の実行
OCIExecute($stmt);
$ncols = OCINumCols($stmt);
echo "<TABLE BORDER='1'>";
echo "<TR>";
for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
echo "<TH>" . $column_name . "</TH>";
}
echo "</TR>";
// データのFetch
while(OCIFetch($stmt))
{
echo "<TR>";
for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
// データの表示
echo "<TD>" . OCIResult($stmt, $column_name) . "</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
// リソースの解放
OCIFreeStatement($stmt);
// Oracleから切断
OCILogoff($conn);
?
エラーを読んでみるに、最初のエラー「ORA-12154」が原因のようで、
ネットで調べると、「ORA-12154: TNS: 指定された接続識別子を解決できませんでした.」
ということだそうです。
おそらく、PHPがtnsnames.oraを読めていないのだと推測しています。
気になる点は、phpinfo()を見ると、oci8の欄が
Oracle Versionが10.1
Compile-time ORACLE_HOMEが/opt/oracle/product/10.1.0
Libraries Usedが-Wl,-rpath,/opt/oracle/product/10.1.0/lib -L/opt/oracle/product/10.1.0/lib -lclntsh
となっていることです。
当方のバージョンは10.2です。
OracleはMiracle Linuxに付属しているoranaviというツールを使ってインストールしました。
ApacheもPHPもMiracle Linuxのパッケージを使っています。(デフォルトでインストールされるものです)
この問題の解決方法をご存知の方がいらっしゃいましたら、
具体的な解決手順をご教授、または、参考サイトの紹介でもよろしいですので、お願いいたします。
よろしくお願いいたします。
PHP-users メーリングリストの案内