• 締切済み

phpでSQLSV2005の画像を表示する方法

いつもお世話になっております。 php5.1でSQL Server 2005のIMAGE型内の画像を表示するにはどうすればよいでしょうか。 以下のソースでデータを読み込んで出力しようとしていますが、 ブラウザには × が表示されてしまいます。 **** phpここから ************************************************************* header("Content-Type: image/jpeg"); header("Content-Disposition: inline;"); header("Content-Transfer-Encoding: binary"); $con = mssql_connect("xxDBサーバxx", "xxIDxx", "xxパスワードxx"); if (!$con) { print("データベースへの接続に失敗しました"); exit; } if (!mssql_select_db("xxDB名xx")) { print("データベースへの接続に失敗しました"); exit; } $sql = "select img_data from foo "; //img_data は IMAGE型 $result = mssql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); exit; } $row = mssql_fetch_row($result); echo $row[0]; **** ここまで ******************************************************************** DBのフィールド img_data には数百KBの画像データが入っているはずなのですが、 試しに strlen($row[0])の値を見てみると、4096でした。 4KBしかデータを得れていない様に見えます。 もしかすると、特殊な変換をしないとデータを得ることができないかとも思ったのですが、 同じテーブルを使用するVB6.0のプログラムでは以下の様な問合せで表示できている様子です。 SQL: SELECT img_data FROM foo もしかすると、PHPは特殊な処理をしないとデータを得ることができないのでしょうか・・・? お詳しい方がいらっしゃいましたら、何卒ご教授をお願い申し上げます。 何卒よろしくお願い致します。

みんなの回答

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.1

SQLサーバーは使った事がないのですが・・・ fetchしないとデータとれませんよね? $result = mssql_query($sql); $imageData = mssql_fetch_array($result); とか。 あと、質問とは無関係かもしれませんが、取得失敗時でもHTTPヘッダが先に出ちゃってるので、データ取得してからheader関数呼んだ方がいいですよ。

p2heycocoon
質問者

お礼

自己解決しました! mssql.textlimit や mssql.textsize の設定に引っかかっているだけでした。 以下の様に ini_set() をすれば全て出ました。 ini_set("mssql.textlimit", 1024*1024*1024*2); //2GB ini_set("mssql.textsize", 1024*1024*1024*2); //2GB

p2heycocoon
質問者

補足

早速のご解答ありがとうございます。 >fetchしないとデータとれませんよね? すいません、書き間違えていました。 質問中の mssql_fetch_row は間違いで、 正しくは mssql_fetch_array です。 なので、fetch はしています。 >取得失敗時でもHTTPヘッダが先に出ちゃってるので なるほど! ヘッダー出力は後にします。

関連するQ&A