現在、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のなにかサンプルがあれば教えてください。

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Qラージオブジェクトについて

PDFファイルのデータベースをPostgreSQLで構築しています。

データベースの項目には「タイトル」「著者名」「注釈」などとともにラージオブジェクトとしてPDFファイルそのものをデータベースに取り込んでいます。PDFファイルのファイルサイズは10KB~20MB程度です。

最近、書店でPostgreSQLの本を見てもラージオブジェクトに関する解説を書いたものがほとんどなく、ひょっとすると将来的にはラージオブジェクトは廃止になるのではと危惧しています。

よく考えてみれば、データベースを初めに構築するときに、PDFファイルをファイルシステムのディレクトリ内に保存して、そのファイル名をデータベースで管理すれば良かったと今頃後悔しているところです。

ラージオブジェクトを使って、バイナリファイル(ここではPDF)を保管するメリットがあるのか? ラージオブジェクトはPostgreSQLで今後も対応されるのか? など、ご意見、感想などありましたらご教示ください。

ラージオブジェクトにメリットが無いなら、近い将来、あまりデータベースが巨大にならないうちに、PDFファイルを取り出すスクリプトなど作らなければと考えております。

よろしくお願いいたします。

PDFファイルのデータベースをPostgreSQLで構築しています。

データベースの項目には「タイトル」「著者名」「注釈」などとともにラージオブジェクトとしてPDFファイルそのものをデータベースに取り込んでいます。PDFファイルのファイルサイズは10KB~20MB程度です。

最近、書店でPostgreSQLの本を見てもラージオブジェクトに関する解説を書いたものがほとんどなく、ひょっとすると将来的にはラージオブジェクトは廃止になるのではと危惧しています。

よく考えてみれば、データベースを初めに構築するとき...続きを読む

Aベストアンサー

LOBはSQL99で標準SQLに入ったばかりだし、操作するのにアプリケーションを作成する必要があり、RDBMS全体の機能としては局所的なものなので、雑誌や書籍類で取り上げられる機会は少ないと思います。

>ラージオブジェクトを使って、バイナリファイル(ここではPDF)を保管するメリットがあるのか?

メリットとしては、
(1)障害運用を一元化できる
(2)セキュリティの管理を一元化できる
(3)PDFデータを管理するテーブルのデータと、PDFの内容の不整合を防げる
などでしょう。

デメリットとしては
(1)PDFの内容を確認したい場合、RDBMS経由でないとダメ。検索や更新用のアプリケーション等を作っておく必要がある。
(2)PDFのデータを管理するのに、RDBMS側でも管理情報が必要になり、DBの容量が増える
などです。

QpostgresQL に格納した画像ファイルはどこに保存されていますか?

postgreSQL に格納(ラージオブジェクトとして)した画像ファイルは、サーバー上のどの部分にどのようなファイル名で保存されていますか?ラージオブジェクトのバックアップ作業をする上での質問です。どなたか、教えていただけないでしょうか?

Aベストアンサー

日本PostgreSQLユーザ会の日本語のドキュメント集が参考になるかと思います。
ラージオブジェクトの説明については、プログラマガイド、バックアップについてはアドミニストレータガイドを参照してください。

一応回答としては...
ラージオブジェクトはデータベース内に格納されています。
ラージインターフェースオブジェクトについてはバージョンが4.2までは、外部ファイルとして格納するなど3種類の格納方法があったようですが、6.5ではデータベースに格納されるとあります。

参考URL:http://www.jp.postgresql.org/

Q別のDBからテーブルをコピーする方法

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客


人気Q&Aランキング