質問 |
||
| QNo.2510726 | DBに格納されたバイナリデータを画像表示する方法 | |
|---|---|---|
| 質問者:masamasu |
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"> こんな感じなのですが、どこがどう違うのか何度も試してやっとここまできたのですが、答えがでません。お解りの方いらっしゃいましたらご指摘をどうかよろしくお願いいたします。 |
|
困り度:
|
||
| 質問投稿日時: 06/11/01 10:52 |
||
回答良回答20pt |
|
| ANo.1 | $img_dataの内容がおかしいのでしょうか? $img_dataの内容が正しいなら、PHPの問題なので、PHPのカテゴリで質問した方が回答あると思います。 >header('Content-Disposition: inline; filename=' . $img_data); PHPは分らないので、参考意見ですが、ファイル名に生データ入れてる様に見えますが、ここは問題ないですか? >print"${img_data}"; エスケープしたデータを、そのまま出力しているように見えます。アンエスケープして、バイナリ出力するべきでは? 中途半端な回答でごめんなさい。 |
|---|---|
| 回答者:noname#22650 | |
| 種類:補足要求 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 06/11/01 13:53 |
|
| |
| この回答へのお礼 | 早速の回答誠にありがとうございます。 いろいろ試してみた結果、解決できました! 下記の↓の一行を追加しました。 【画像表示用ファイルスクリプト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}"; |