• ベストアンサー

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" )等は画像情報をちゃんと取得できます。 画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。 原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
回答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()だけでは代わりにならなかったりします。

関連するQ&A

  • phpでの画像出力

    フォームでアップロードした画像(jpg)を、base64でエンコードしてテキストとしてDBに格納しています。 そのデータをDBから取り出して、PHPで出力したいのですが、上手く行きません。 下記のような手順で試しましたが、ダメでした。 ※php5とMySQLです。 $img = base64_decode("※DBから取り出したテキスト"); header("Content-type: image/jpeg"); echo $img; 尚、下記のような形では画像表示出来ましたが、出来ればphpからの出力をしたいと考えています。 <img src="data:image/jpeg;base64,※DBから取り出したテキスト" /> php初心者ですが、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpで画像のリサイズ表示

    質問お願い致します。 phpで画像のリサイズをして表示させたいと思っています。 色々調べた結果下記のサンプルコードを入れてみました。 <?php header("Content-Type:image/jpeg"); $imgpath = "http://*****************.jpg"; $im_info = getimagesize($imgpath); $src_im = ImageCreateFromJPEG($imgpath); $dst_im = imagecreate($im_info[0]/2,$im_info[1]/2); imagecopyresampled($dst_im,$src_im,0,0,0,0,$im_info[0]/2,$im_info[1]/2,$im_info[0],$im_info[1]); imagejpeg($dst_im); ?> しかし「画像ファイル "http://*****************.php" は壊れているため、表示できませんでした。」となってしまいました。 色々試した結果、下記の記述だけでも「画像ファイル "http://*****************.php" は壊れているため、表示できませんでした。」と表示されてしまいました。 <?php header("Content-Type:image/jpeg"); ?> 「header("Content-Type:image/jpeg");」を使用する際にはphp.iniの書き換えをするのかと調べてみたのですが、結局原因はわかりませんでした。 サーバーはさくら(スタンダードコース)です。 PHPは「PHP 5.2.17」になります。 どなたかお知恵を貸して頂けないでしょうか。 宜しくお願い致します。

    • 締切済み
    • PHP
  • [au携帯] DBに格納されたバイナリ形式の画像を表示する方法

    [au携帯] DBに格納されたバイナリ形式の画像を表示する方法 データベース(PostgreSQL)に格納されたバイナリデータの画像をPHPを使用して元に戻し表示しようとしています。 携帯用ホームページを作成しているのですが、ドコモだとちゃんと表示されるのにAUでアクセスすると画像がバッテンになってしまって表示できません。 下記のようにPHPを使って画像を表示しているのですが何処が間違っているのでしょうか。 画像の表示用 img.php <?php //DBから必要なデータを取得します。 // $imag_data ------- バイナリ形式の画像データ // $image_file_type - 画像保存時に下のようにして取得した値 // list($width,$height,$image_file_type)=getimagesize($imgurl); // $img_name -------- 画像の名前 $imag_data = pg_unescape_bytea($imag_data); header("Content-type: " .$image_file_type); header('Content-Disposition: inline; filename="' .$img_name.'"'); print($imag_data); exit(); ?> img.phpに直接アクセスするのと、<img src='http://…img.php' />で表示してみたのですが、ドコモだと2通りともできるのに、AUだと「リクエストされたページは表示できません。」と出てしまい、困っています。 どなたか、ご教授くださいますようよろしくお願いいたします。

    • 締切済み
    • PHP
  • phpでテキストを返す

    html側で <img src="./image.php" /> php側で header("content-type: image/jpeg"); imagejpeg($image); imagedestroy($image); とすると、画像が表示されますが、 これを画像ではなく、テキストで返すにはどのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • Apache,phpで画像が表示されない

    こんにちは Apache2.2、php5を使用しています。 ブラウザに画像を表示させたいのですが、URLで直接画像ファイルを指定するとファイルの場所を見せてしまうので、非公開のディレクトリの画像を表示させるようにphpのプログラムを呼び出して(引数をファイル名)にしています。 画像が「X」の状態で表示されません。(涙 header('Content-Type: ' . 'image/jpeg'); header('Content-transfer-encoding: binary'); header('Content-length: ' . filesize(/.../../$fileName)); header('Content-Disposition: attachment; filename="' . $fileName . '"'); のあとで、fopen() ->> fpassthru();で処理したのですが、小さい画像ファイルは処理は終わっていますが、「X」の状態で表示されて、大きい画像ファイルを指定するとfpassthru()の中で死んでしまいます。 fread ->> print ->> flush()ループで処理すると、flushの中で死んでしまいます。 error.logにも特に情報が残っていないので... 何かご存知の方はいらっしゃいませんか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MYSQLにおける、画像の表示について。

    いつも参考にさせていただいております。 ありがとうございます。 さて、表題の件ですが、現在、画像掲示板を作成中です。 テーブルの作成が終わり、アップロードするPHPまでは完了。 画像がバイナリで保存されるところまでは作成が完了しました。 次に、呼び出しのPHPを作成しようと現在作成中ですが、ここで躓づきました。 テーブル Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | commentid | int(3) | YES | | NULL | | | comment | mediumtext | YES | | NULL | | | picture1 | mediumblob | YES | | NULL | | このテーブルの中に、レコードが5つあり、それぞれカラムpicture1に画像データを持たせてあります。 このテーブルに対して、 <?PHP $s=mysql_connect("localhost","root","password") or die("登録フォーム接続に失敗しました。"); mysql_select_db("smartphone"); $result = mysql_query("SELECT * FROM commentmaster"); while($row = mysql_fetch_array($result)){ header("Content-type: image/jpeg"); print($row[3]); } exit(); ?> <html> <head> <title>コメント一覧</title> </head> </html> 以上のPHPファイルで画像の呼び出しをしようとしたのですが、 1枚目の画像は表示されるものの、2枚目以降の画像が表示されません。 ちなみに、 header("Content-type: image/jpeg"); print($row[3]); の部分を、 #header("Content-type: image/jpeg");←コメントアウトした。 print($row[0]);←picture1ではなく、IDを取得に変更 このように変更すると、カラム0のIDが5つ表示されます。 過去のコメントを拝見したのですが、機能的に無理なものなのか、書き方が悪いだけなのか。 また、別の方法があるのかの判断が付きませんでしたので、質問をさせていただきました。 お手数をおかけしますが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • getimagesize()を使用して画像の種類を取得するには?

    getimagesizeを使用して画像の種類(JPEG,GIFなど)を取得したいのですがなかなかうまくいきません。ソースは以下の通りです。 <?php $image = $_POST['image']; if(isset($_POST['add'])){ $img_type = getimagesize($image); if($img_type['mime'] == "image/jpeg"){ print"JPEGです。"; }elseif($img_type['mime'] == "image/png"){ print"PNGです。"; }else{ print"JPEG,PNG以外です。"; } } ?> <form action="this.php" method="post"> <input type="file" name="image"> <input type="submit" name="add" value="チェック!"> </form> よろしくお願いします。

    • ベストアンサー
    • PHP
  • GD(php)での image関数 イメージ関数でブラウザ出力が出来ない

    下記ソースのimage.phpというファイルを作りました。 直接http://url/image.phpでアクセスすると画像が表示されません。 <? header("Content-Type: image/png"); $image = imagecreate(120,120); $black = imagecolorallocate($image,0,0,128); $yellow = imagecolorallocate($image,255,255,0); imageline($image,10, 60, 110, 60, $yellow); imagepng($image); imagedestroy($image); ?> imagepng($image);を imagepng($image,"test.png"); に変えたら、正しく同フォルダーにtest.pngが出力され、こちらは問題ないファイルとなっています。今回の処理ではphpを画像ファイルとして扱いたいのですが、 このケースで考えられる原因教えてください。 参考までにtest.htmlに <html><head><title>test</title> <img src="image.php"></body></html> と書いても結果は同じく画像表示が出来ませんでした。 <html><head><title>test</title> <img src="test.png"></body></html> では表示出来ます。

    • 締切済み
    • PHP
  • PHP getimagesize();

    プログラミング初心者です。 現在、PHPにてブラウザに画像の表示をしようとしているのですが 上手く行きません。ソースコードを張るのでダメなところがありましたら 手ほどきの程お願い致します。 ーーーーー <?php $fileName = "test.jpg"; //ファイル名 if (file_exists($fileName)) { header('Content-type: image/jpeg'); header('Content-Length: '.filesize($fileName)); //あった方が良い readfile($fileName); //ファイルを読み込んで標準出力に書き出し ★getimagesize(test.jpg); exit; }else{ echo "b"; } ?> ーーーー 目的 - phpにてブラウザに画像の表示 状況 - 最初は★のある行はなしでやっていたが 画像が映るも、かなり小さかったので大きくしようと ★のある行を追加。 - 画像の小ささはスクリーンショットを参考

    • ベストアンサー
    • PHP
  • MYSQLでPHPから画像表示したい

    以下でPHPとMYSQLにて画像jpgを表示できたのですが、 header("Content-type: image/jpeg"); $result = mysql_query("SELECT * FROM test"); $row = mysql_fetch_assoc($result); print ($row['image']);これだけなら表示OK。 しかし、 テーブルタグの中にprint ($row['image']);をいれたり while文で囲んだりすると、文字の羅列になってしまいます。好きな場所にprint ($row['image']);で表示するには どうしたらいいのでしょうか?

    • ベストアンサー
    • PHP