こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

DBに格納されたバイナリデータを画像表示する方法

PHP初心者ですみません。PHP、PSQLでDBにアップロードされた画像データ(バイナリデータ)をWEB上で例<img src=image.php>画像表示したいのですが、画像が×表示になってしまいます。格納時にデータが間違っているのか?それとも表示方法が間違っているのかわかりません。どなたか助けてください。
【アップファイル格納時スクリプト】

//fopenして変数に保存
$fp = fopen($_FILES["upfile"]["tmp_name"],"r");
$imagedata = fread($fp,filesize($_FILES["upfile"]["tmp_name"]));
fclose($fp);

//バイナリデータをエスケープ
$imagedata = pg_escape_bytea($imagedata);
$filename = $_FILES["upfile"]["name"];
$sql_g = "update img set img_data='$imagedata'";
$conn_g = connect();
$result_g = pg_query($conn_g,$sql_g);
pg_close($conn_g);
}

【画像表示用ファイルスクリプトimage.php】

$sql_i = "select img_data from img";
$conn_i = connect();
$res_i = pg_query($conn_i,$sql_i);
$num_i = pg_num_rows($res_i);
$img_data = pg_fetch_result($res_i,0,"img_data");
header('Content-type: image/gif');
header('Content-Disposition: inline; filename=' . $img_data);
print"${img_data}";

【画像表示部分スクリプト】
<img src="http://●●●●/●●/image.php" alt="イメージ" width="500" height="100">

こんな感じなのですが、どこがどう違うのか何度も試してやっとここまできたのですが、答えがでません。お解りの方いらっしゃいましたらご指摘をどうかよろしくお願いいたします。

投稿日時 - 2006-11-01 10:52:27

QNo.2510726

すぐに回答ほしいです

質問者が選んだベストアンサー

$img_dataの内容がおかしいのでしょうか?
$img_dataの内容が正しいなら、PHPの問題なので、PHPのカテゴリで質問した方が回答あると思います。

>header('Content-Disposition: inline; filename=' . $img_data);
PHPは分らないので、参考意見ですが、ファイル名に生データ入れてる様に見えますが、ここは問題ないですか?
>print"${img_data}";
エスケープしたデータを、そのまま出力しているように見えます。アンエスケープして、バイナリ出力するべきでは?

中途半端な回答でごめんなさい。

投稿日時 - 2006-11-01 13:53:38

お礼

早速の回答誠にありがとうございます。
いろいろ試してみた結果、解決できました!
下記の↓の一行を追加しました。

【画像表示用ファイルスクリプトimage.php】
$sql_i = "select img_data from img";
$conn_i = connect();
$res_i = pg_query($conn_i,$sql_i);
$num_i = pg_num_rows($res_i);
$img_data = pg_fetch_result($res_i,0,"img_data");

header('Content-type: image/gif');
header('Content-Disposition: inline; filename=' . test.gif);

//↓ここを追加してみました↓
$img_data=pg_unescape_bytea($img_data);

print"${img_data}";

投稿日時 - 2006-11-01 18:54:04

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問