重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!goo新規会員登録

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" )等は画像情報をちゃんと取得できます。

画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。
原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

A 回答 (3件)

#1 の方が仰る様に getimagesize は、ファイルを読み込んで情報を出力する関数ですから、バイナリのデータでは無理なのではないかと。



私が前にやった方法だと、ファイルをDBにBLOBに入れる際に、その画像ファイルの属性を別テーブルに入れていました。

そんなときファイルをDBに入れる際に、getimagesize を使うと便利だろうなと言う感じはします。

こっちの方が明瞭ですし、扱いやすかったです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/19 09:41

データベースの代わりに以下でやってみましたがちゃんと取得できるようです。


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();
?>
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/19 09:45

誤解があります。



getimagesize()はファイル名を指定して情報を
えるコマンドです。そこに中身のデータを
ながしても情報が得られるわけがないかと・・・。

試してないですが、strlen($src)などで
バイナリサイズを得ればすむのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/19 09:49

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