dポイントプレゼントキャンペーン実施中!

はじめまして。
今、(1)ファイル参照から画像ファイルを選択してDB(MySQL:phpMyAdmin2.10.1)にある
フィールド(gazou)へBLOBのバイナリで保存し、
(2)違うぺージでDBに保存してある画像を、検索して表示させたいのですが、

以下のようになってしまい、表示できません。

http://shokuhidiet.web9.jp/a/3.bmp


ソースを載せておきます。どうかよろしくお願いいたします。

http://shokuhidiet.web9.jp/a/sos.txt

A 回答 (4件)

> echo "<img src=\"data:image/gif;base64,${gif_enc}\" />";


現在の主なブラウザは、html内に画像のバイナリー情報を埋め込んでも(たとえbase64encodeしても)表示出来ません。
srcは、ファイル名を指定する属性なので、アドレスが入っていれば、サーバーからそんなファイルは無いという情報が返って、表示不可用の画像になるけど、data:スキームだと、どこかに探しに行ってそのまま返ってこないのでしょう。
一枚の画像のみを出力するphpスクリプトを別に作って、img src="" では、そのphpスクリプトを呼び出すようにするのが一般的だと思います。
    • good
    • 0
この回答へのお礼

お返事遅くなって申し訳ございません><
なるほど、それが原因だったんですね・・・。
やってみます!!ありがとうございます♪^^

お礼日時:2008/01/21 09:30

実験していないので分かりませんが、


queryだと、バイナリデータ中にたまたま引用符の文字コードや、\の文字コードに一致するデータがあった場合、動作が怪しくなる様に思います。

base64エンコードして登録、取りだす時にbase64デコードとかしたら、
どうでしょうか。

もしくは、PEAR::DBとかPEAR::MDB2とかの追加ライブラリで
prepareがあるものを利用したらどうでしょうか?

でも、この問題の答えはANo.3の言っている通りなのかな、と思います。
    • good
    • 0
この回答へのお礼

お返事遅くなって申し訳ございません。
そのような事があるんですか><;

ありがとうございます。ぜひ参考にさせていただきます^^

お礼日時:2008/01/21 09:33

とりあえずソースだけ拝見しましたが


mysql_connectの引数くらいは隠した方が良いです^^;;
ダミーだったとしても少しアレです。危機管理意識を持ちましょう。


本題ですが、
画像が途中で切れる、色情報が崩れるというのは何かの処理でバイナリにゴミが入っていることが原因であることが多いです。
または通信のタイムアウト、パケロスなどによる情報不足でもそうなります。
システム開発全般に言えることですが、出力したいデータが意図しないものであった場合はI/Oの手順を一つ一つ丁寧に確認することが肝要です。

この場合ですと
1.mysqlに入れ込む
2.mysql->phpで取得
3.php->クライアント
をそれぞれ確認するのが肝です。(本当はもっと細かいところまで精査すべきですが)

1.
mysqlに入っているバイナリが入れたいバイナリと完全に同一であるか確認しましょう。
mysqlであればBLOGの最大長を超えたバイナリは破棄される仕様だったと記憶しています。
http://dev.mysql.com/doc/refman/4.1/ja/blob.html
PHPの転送量制限なども合わせて確認し、入っているバイナリが本当に正しいかチェックしましょう。

2.
php内でunpack()などを使いバイナリを視覚的に読めるものへ変換し壊れた部分をチェックしましょう。
もしかしたら変な文字が入っているかもしれません。(ソースをさらっと見た限りではなさそうですが)

3.
各種サーバの転送量制限に引っかかってたりしないか確認しましょう。
送信するパケット単位が大きいと途中でタイムアウトすることもあります。。
といっても昨今の環境ではお目にかかることは無いでしょうが。^^;

当方的には1.が一番怪しいのではないかなぁと。
// dataスキームってieでは見られなかったと記憶してますが大丈夫でしょうか
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
全然気がまわっていませんでした><;
以後気をつけます^^


ご丁寧なアドバイスありがとうございます!!
ちょっと調べて、また報告させていただきます♪

バージョンはIE6なんですが、、、関係してるんでしょうか。。。
IE6でも見れる方法とかあるといいのですが><;

お礼日時:2008/01/18 15:11

外部にソースを置かれると誰も見てくれないと思われます。


// 安全なURLであるという保障が無いため
// 当方は面倒なだけですが

不明点を明確にし質問すると良いでしょう。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。

画像が、□に×がついて表示されないってのは私も見たことあるんですが、

×にもならず、表示されるかされないかの微妙なところでとまってしまって、結局表示されないのです・・・。

$gazou = $row["gazou"];
$gif_enc = base64_encode($gazou);
echo "<img src=\"data:image/gif;base64,${gif_enc}\" />";

で表示しようとしたら、そうなってしまいました・・・。

お礼日時:2008/01/18 13:20

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