プロが教えるわが家の防犯対策術!

現在、PostgreSQL+PHPで画像管理DBを作成しています。
開発環境は、
Solaris8
Apache1.3.12
PostgreSQL7.1.3
PHP-4.1.0
で行っています。

今、PostgreSQLのラージオブジェクトを使用して画像(JPEG)のDBへの登録及び画面に表示するところを作っているのですが、PHPのスクリプトを作成してWeb上から動作確認を行ったところ、画面に以下の文字が表示されました。

=====表示される文字列=====
・・JFIF,,・厥hotoshop 3.08BIM,,
・'File written by Adobe
屯胖7GWgwt6Х牌范
:
=========================
多分、画像(JPEG)のバイナリがそのまま出力されていると思われます。

これは、PHPの問題なのでしょうかそれとも、DBへの登録が失敗したのでしょうか?

教えていただけないでしょうか?また、
PHP4.1.0+PostgreSQL7.1.3の環境で画像管理DBのなにかサンプルがあれば教えてください。

A 回答 (1件)

別にPHPの問題でもありませんし、DBへの登録が失敗しているわけでもないと思います。


HTTPでは拡張子でファイル種別をしているわけではなくサーバから帰ってくるContent-typeを見て、ファイルを識別します。なので拡張子がhtmlのjpgファイルでも拡張子がjpgのhtmlファイルでも自在ゆっくり、表示させる事が出来ます。

ytak0104の場合、多分普通にlarge objectを取得してprintしただけなのでしょう。その場合、phpがデフォルトのmime-typeであるtext/htmlをかえしてしまいます。
そのためブラウザは続くデータをhtmlとして処理しようとしてバイナリデータが表示されてしまう、というわけです。

どうすれば良いのか?というとブラウザに続くデータはJpegデータである、という事を示してやれば良いのです。
つまり表示するphpファイルの頭の方でheader関数を使って

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

としてやればブラウザは続くデータを画像として処理してくれるでしょう。
    • good
    • 0

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