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>
本やネットで自分なりに調べた結果、これで画像が表示されるはず(!?)だと思っているのですが、残念ながら、画像は×になって表示されません。
初歩的な質問ですみませんが、どうすれば画像は表示されるのでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
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','長い文字列'); 』
の間違いです。
回答ありがとうございます。ご指摘の通り、以下のスクリプトを作って実験してみました。
------------------------------------------------------------------
画像を吐き出すスクリプト [ 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] |
どこに原因があるのかさっぱりわかりません・・・。
どうかよろしくお願いします。
No.4
- 回答日時:
>>>header("Content-type: image/jpeg");
>>>をコメントアウトしてテキストとしてブラウザに表示してみてください。
>
>image.phpに文字化けした文字がずらっと並ぶと同時に、firefoxのファイルサイズも反映されなくなりました。
文字化けした文字が出ていれば正解です。
文字化けするのは画像ファイル(バイナリ)を無理やりテキストで表示しようとしているためです。
この文字化けした文字列の最初の部分に読み取れるエラーメッセージ等がでていないでしょうか。
もし出ていれば画像ファイルが壊れてしまうので正常に表示できません。
出ていなければコメントアウトした部分を戻すと画像が表示されるはずですが…。
>>この文字化けした文字列の最初の部分に読み取れるエラーメッセージ等がでていないでしょうか。
でていないんですよね・・・。私もいろいろ調べたんですが、やはりこれで正解のような気がしてなりません。
matchasoftさん、何度も回答してくださってありがとうございました。
ここで質問を締め切らせていただきます。
No.3
- 回答日時:
もう一息ですね。
image.phpのどこかでエラーや警告が出ていないでしょうか。ヘッダとして"Content-type: image/jpeg"を出力するとエラーや警告が発生しても画面に表示されなくなり、代わりに画像が壊れてしまいます。
ですので、エラーや警告をログファイルに吐き出すようにするか、もしくは
header("Content-type: image/jpeg");
をコメントアウトしてテキストとしてブラウザに表示してみてください。
ブラウザに文字化けした文字のみ(画像ファイルを無理やりテキストエディタで開いたような文字)が出ていれば正解です。
matchasoftさん、回答ありがとうございます。返信が遅れてしまい大変失礼いたしました。
>>header("Content-type: image/jpeg");
>>をコメントアウトしてテキストとしてブラウザに表示してみてください。
image.phpに文字化けした文字がずらっと並ぶと同時に、firefoxのファイルサイズも反映されなくなりました。
文字コードを変えたり、環境を変えたりして試してみたのですが、いずれも表示されませんでした。 ううう・・・。
No.2
- 回答日時:
print $row[id]; でエラーになりませんか?
テストのためにIDを固定にしているのなら
print $row[1];
になると思います。
再び回答ありがとうございます。
念のためテーブルから作り直して違う画像を入れ 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でファイルサイズが反映されているところを見ると、データー自体は送られているようなのですが・・・なんだか意味不明です。
ややこしくてすみません、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの「MsgBox」について
-
GDI+を使ったビット数とDPIの扱い
-
php,mysqlにて画像パス保存/表...
-
手作業で埋め込んだ、UserForm1...
-
PythonのTkinter詳しい方へ。画...
-
拡張子php画像をjpg画像等に変...
-
Illustratorで文字と画像を流し...
-
画像イメージの背景を透過にす...
-
GD(php)での image関数 イメ...
-
wordpressサイトにて、画像ウィ...
-
PHPで吐き出した画像にリンクを...
-
「imagecreatefromjpeg」について
-
透過PNGが透過されない!!
-
ファイル名の後の"?"の意味は??
-
PHP MySQLに画像を直接保存
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
onedrive にexcelファイルをア...
-
ImageCreate関数が undefined f...
-
.phpと.incファイルの違いはな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
透過PNGが透過されない!!
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
Illustratorで文字と画像を流し...
-
手作業で埋め込んだ、UserForm1...
-
GDI+を使ったビット数とDPIの扱い
-
C# Excelファイルへの画像挿入。
-
VBAでJPGサイズ変更
-
GD(php)での image関数 イメ...
-
ListViewコントロールでサムネ...
-
php,mysqlにて画像パス保存/表...
-
ckfinderの画像のアップロード先
-
改行コードのカウント
-
Web画像コピー不可にする方法
-
<ASP.NET+C#+MSDE> JPEG画像の...
-
pictureboxに表示した画像のフ...
-
phpで画像がどうしても文字化け...
-
<img src="http://x.y.com/cgi-...
-
iphoneで虫眼鏡の作り方
-
PHP初心者です。画像データ...
おすすめ情報