[PHP-users 16917]PHPとOracleの同時接続ができません

yusaku @ you.co.jp yusaku @ you.co.jp
2003年 7月 23日 (水) 18:55:45 JST


はじめて投稿させていただきます。
Tsuchihashi ともうします。

今回の質問はWEB上でPHPとOracle9iとの同時接続ができないというものです。
まず、OracleのあるテーブルにCLOB型で画像ファイル(GIF)をバイナリで保存し
てあります。
その画像を一覧表示させようと呼び出し元のHTMLファイルに<img src="*.php">
を記述し、ブラウザで表示さようとするとかなりの確率でapacheが落ちます。た
だし1つだけの表示なら落ちません。
PHPのエラーログには【PHP Warning:  _oci_open_server: ORA-12154: TNS: サ
ービス名を解決できませんでした】と記録されています。
文章ではうまくご説明できませんので下記のソースをご覧ください。

======================================
 ■環境
======================================
・Windows2000 Pro SP4
・Apache 1.3.27
・PHP 4.2.3
・Oracle9i Release 9.2.0.1.0
======================================
 ■Oracle テーブル構造
======================================
 テーブル名:A_TABLE

  ID(NUMBER型)| IMAGE (CLOB型)
 ---------------+------------------
        1       | バイナリソース
        2       | バイナリソース
        3       | バイナリソース

======================================
■ソース1(呼び出しもと画像一覧ファイル)
 ファイル名:list.html
======================================
<html>
<head>
<title>画像リスト</title>
</head>
<body>
<img src="image.php?ID=1"><br>
<img src="image.php?ID=2"><br>
<img src="image.php?ID=3"><br>
</body>
</html>
======================================
■ソース2(DBから画像を取り出し表示)
 ファイル名:image.php
======================================
<?php   

mb_http_output("pass");

header("Content-Type: image/gif\n\n");

$con = OCILogon(DBname, PASS, SID); //2回目以降のここでエラー

$sql = "SELECT IMAGE FROM A_TABLE WHERE ID = ".$_GET['ID'];
$stmt = OCIParse($con, $sql);
OCIExecute($stmt, OCI_DEFAULT);

$flag = OCIFetchInto($stmt, &$arr, OCI_ASSOC);

OCIFreeStatement($stmt);
OCILogoff($con);

/* ファイルの出力 */
echo $arr['IMAGE']->load();

?>
======================================
上のソースはかなり簡単にしております。

Oracleとの接続はほかのページではうまく接続できていますが、このページだけ
うまくいきません。
OCILogonをOCIPLogonやOCINLogonで試したのですがそれもうまくいきません。
MilacleLinux上のPHP+Oracleでも試しましたが同じ結果ですので環境はあまり関
係ないようです。
DBに画像を保存する方法はあまりよくない方法なんでしょうか?

ご教授よろしくおねがいいたします。

***************************
Yusaku Tsuchihashi
yusaku @ you.co.jp
**************************


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