• ベストアンサー

DBからPHP出力された画像の情報取得について

Linux、PHP4.3.11、MySQLの環境でPHPスクリプトの作成を試行しています。 MySQLの BLOB型 に格納された画像バイナリを呼び出してそのまま出力するスクリプトを作成し、同スクリプトから出力された画像ファイルのサイズや種別情報を「getimagesize()」で取得しようとしているのですがうまく行きません。 画像出力の処理は、MySQLからバイナリのデータを読み出して HTTP HEADER をつけてそのまま出力する処理を行っています。 // 画像出力処理 <?php $image = /* DBからバイナリを取得する処理 */ header("Content-type: image/jpeg\n\n"); echo $image; exit(); ?> 上のスクリプトをWEBブラウザで呼び出すと画像を表示する事ができます。 また、<img src="画像出力スクリプトのURL">としてHTML中に記述しても画像を表示できます。 しかし、getimagesize() で画像情報を取得しようとしても False となり、画像の構成情報を取得できません。 // 画像情報取得処理 <?php $src = "http://画像出力スクリプトのURL"; var_dump(getimagesize($src)); exit(); ?> $src にローカルにある実ファイル画像を指定した場合( "./hoge.jpeg" )や 他のWEBサーバ上にある画像ファイルを指定した場合( "http://よそのサーバURL/hoge.jpeg" )等は画像情報をちゃんと取得できます。 画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。 原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#1 の方が仰る様に getimagesize は、ファイルを読み込んで情報を出力する関数ですから、バイナリのデータでは無理なのではないかと。 私が前にやった方法だと、ファイルをDBにBLOBに入れる際に、その画像ファイルの属性を別テーブルに入れていました。 そんなときファイルをDBに入れる際に、getimagesize を使うと便利だろうなと言う感じはします。 こっちの方が明瞭ですし、扱いやすかったです。

sstone
質問者

お礼

参考になります。 格納時に付属情報も全て記録するようにしてみようと思います。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

データベースの代わりに以下でやってみましたがちゃんと取得できるようです。 image.php <?php $image = file_get_contents("test.jpg"); header("Content-Type: image/jpeg"); echo $image; ?> <?php $src = "http://localhost/php/image.php"; var_dump(getimagesize($src)); exit(); ?>

sstone
質問者

お礼

私の環境ではダメなようです。 PHPのverやOS、リモートとローカル等環境が違うのでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

誤解があります。 getimagesize()はファイル名を指定して情報を えるコマンドです。そこに中身のデータを ながしても情報が得られるわけがないかと・・・。 試してないですが、strlen($src)などで バイナリサイズを得ればすむのでは?

sstone
質問者

お礼

ファイルのサイズの情報が必要なわけではなくて画像のMIME情報等の付随情報が欲しかったのでgetimagesize()を使いたいのでした。 なのでstrlen()だけでは代わりにならなかったりします。