アプリ版:「スタンプのみでお礼する」機能のリリースについて

php(4.3)とmysql(4.0)を使って、BLOBに格納した画像を表示させたいです。

テーブル:gazou 画像名:aa.gif

| id |   images    |
| ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄
| 1 | [BLOB-2.9KB] |

↑ PHPMYADMINでデーターを作って、画面にはこのように表示されています。

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-JP”>
</head>
<body>
<?php
$conn = mysql_connect("localhost","user","pass");
mysql_select_db(test);

$self = basename($_SERVER['PHP_SELF']);

$sql = " SELECT * FROM gazou ";
$rst = mysql_query($sql,$conn);

while($row=mysql_fetch_array($rst)){
print"<img src='{$self}?id=$row[id]'>";
}

?>
</body>
</html>

本やネットで自分なりに調べた結果、これで画像が表示されるはず(!?)だと思っているのですが、残念ながら、画像は×になって表示されません。

初歩的な質問ですみませんが、どうすれば画像は表示されるのでしょうか?
よろしくお願いします。

A 回答 (4件)

HTMLのIMGタグのSRC属性は普通画像へのURLを入れますよね?


ですので、直接データを入れるのではなく画像を吐き出すスクリプトのURLを入れるようにしてください。
例えば画像を吐き出すスクリプトがimage.phpだとすると以下のようになります。
<img src="imgae.php?id=1">

その上で画像を吐き出すスクリプト(上記の例で言うimage.php)を作成します。画像を吐き出すスクリプトの注意点はHTTPヘッダのMIMEタイプを指定する必要があるということです。
例えばjpeg画像を表示するには以下のようになります。

header("Content-type: image/jpeg");
print 画像データ

たぶん将来的には性能を出すにはキャッシュコントロールなどが必要になりますので、参考URLのサイトでHTTPヘッダを勉強してください。

参考URL:http://www.studyinghttp.net/

この回答への補足

すいません。以下の文の

>>2. phpmyadminを使用して画像を格納。以下のようにSQLが照会されました。
>>『 INSERT INTO `gazou` ( `id` , `image` ) VALUES ('3','長い文字列'); 』



2. phpmyadminを使用して画像を格納。以下のようにSQLが照会されました。
『 INSERT INTO `gazou` ( `id` , `image` ) VALUES ('1','長い文字列'); 』

の間違いです。

補足日時:2006/11/01 14:48
    • good
    • 0
この回答へのお礼

回答ありがとうございます。ご指摘の通り、以下のスクリプトを作って実験してみました。

------------------------------------------------------------------
画像を吐き出すスクリプト [ image.php ]

<?php
$conn = mysql_connect("localhost","user","pass");
mysql_select_db(test);

$sql = " SELECT * FROM gazou WHERE id='1' ";
$rst = mysql_query($sql,$con);
$row=mysql_fetch_array($rst);

header("Content-type: image/jpeg");

print $row[id];
?>
-------------------------------------------------------------

画像表示ページ

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-JP”>
</head>
<body>
<?php

print"<img src='image.php?id=1'>";

?>
</body>
</html>
---------------------------------------------------------------

結果として、画像は×になっており表示されませんでした。この書き方に問題はありますでしょうか?

また、image.phpはどうなっているのだろうと思い、画面を表示させてみたら、 『画像ファイル "http://localhost/image.php" は壊れているため、表示できませんでした。』 という文章が表示されました。

BLOB格納時に私が画像ファイルを壊してしまったのでしょうか。壊した覚えはないのですが、画像格納時の流れを明記しておきます。

1. jpeg画像をパソコンに用意。(この時点で画像はちゃんとみれます)

2. phpmyadminを使用して画像を格納。以下のようにSQLが照会されました。
『 INSERT INTO `gazou` ( `id` , `image` ) VALUES ('3','長い文字列'); 』

3 phpmyadminで確認したら以下のように表示されました。

| id |   images    |
| ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄
| 1 | [BLOB-2.9KB] |


どこに原因があるのかさっぱりわかりません・・・。 
どうかよろしくお願いします。

お礼日時:2006/11/01 12:58

>>>header("Content-type: image/jpeg");


>>>をコメントアウトしてテキストとしてブラウザに表示してみてください。
>
>image.phpに文字化けした文字がずらっと並ぶと同時に、firefoxのファイルサイズも反映されなくなりました。

文字化けした文字が出ていれば正解です。
文字化けするのは画像ファイル(バイナリ)を無理やりテキストで表示しようとしているためです。
この文字化けした文字列の最初の部分に読み取れるエラーメッセージ等がでていないでしょうか。
もし出ていれば画像ファイルが壊れてしまうので正常に表示できません。
出ていなければコメントアウトした部分を戻すと画像が表示されるはずですが…。
    • good
    • 0
この回答へのお礼

>>この文字化けした文字列の最初の部分に読み取れるエラーメッセージ等がでていないでしょうか。

でていないんですよね・・・。私もいろいろ調べたんですが、やはりこれで正解のような気がしてなりません。

matchasoftさん、何度も回答してくださってありがとうございました。

ここで質問を締め切らせていただきます。

お礼日時:2006/11/10 23:30

もう一息ですね。

image.phpのどこかでエラーや警告が出ていないでしょうか。
ヘッダとして"Content-type: image/jpeg"を出力するとエラーや警告が発生しても画面に表示されなくなり、代わりに画像が壊れてしまいます。
ですので、エラーや警告をログファイルに吐き出すようにするか、もしくは
header("Content-type: image/jpeg");
をコメントアウトしてテキストとしてブラウザに表示してみてください。

ブラウザに文字化けした文字のみ(画像ファイルを無理やりテキストエディタで開いたような文字)が出ていれば正解です。
    • good
    • 0
この回答へのお礼

matchasoftさん、回答ありがとうございます。返信が遅れてしまい大変失礼いたしました。

>>header("Content-type: image/jpeg");
>>をコメントアウトしてテキストとしてブラウザに表示してみてください。

image.phpに文字化けした文字がずらっと並ぶと同時に、firefoxのファイルサイズも反映されなくなりました。

文字コードを変えたり、環境を変えたりして試してみたのですが、いずれも表示されませんでした。 ううう・・・。

お礼日時:2006/11/07 14:02

print $row[id]; でエラーになりませんか?


テストのためにIDを固定にしているのなら
print $row[1];
になると思います。
    • good
    • 0
この回答へのお礼

再び回答ありがとうございます。

念のためテーブルから作り直して違う画像を入れ print $row[1]; に変えて試してみたところ、結果としては画像が×の表示だったのですが、image.phpの方は『 http://localhost/image.php 』と表示されました。

(ちなみに実験ブラウザはFirefoxです。IEではimage.phpも×の表示になっています。)


以下の画像に入れ替えました。
--------------------------------------------------------
画像サイズ:15.6KB  幅:200ピクセル 縦:385ピクセル 
-------------------------------------------------------


画像のプロパティを見てみると以下のようになっていました。
--------------------------------------------------------------
[ブラウザ:IE]
プロトコロル:  HyperText 転送プロトコル (HTTP)
種類:      使用不可
アドレス:    http://localhost/image.php?id=1
サイズ:     使用不可
大きさ:    28 × 30 ピクセル
---------------------------------------------------------------
--------------------------------------------------------------
[ブラウザ:Firefox]
url:       http://localhost/image.php?id=1
幅:      24ピクセル
高さ:      24ピクセル
ファイルサイズ: 15.57KB
代替テキスト:  (代替テキストが指定されていません。)
---------------------------------------------------------------

Firefoxでファイルサイズが反映されているところを見ると、データー自体は送られているようなのですが・・・なんだか意味不明です。

ややこしくてすみません、よろしくお願いします。

お礼日時:2006/11/01 18:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!