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