その画像をブラウザで保存しようとすると、
本来の形式ではない形式で保存されてしまいます。
例えば、imagejpeg でjpegを生成したのに、
ブラウザで保存するときに bmp になってしまったり、
携帯電話だと png 形式で保存されてしまったりします。
<img src="http://aa.bb.com/gazou.php?id=1">
などのように「拡張子」を表示していないため、
こうなっているのかな、と推測しています。
これを解決する方法はあるのでしょうか?
正しい画像形式で保存できるようにしたいと思っています。
Content-Type を明示的に指定してやることによりファイルの形式をブラウザに伝えられます。
また、Content-Disposition ヘッダを出力してやれば保存する際のファイル名をブラウザに指定することも出来ます。
header("Content-Type: image/jpeg"); header("Content-Disposition: inline; filename=foo.jpg");
↑この例では画像の右クリック保存、及びURL直接表示でメニューからファイルに保存のどちらを行っても foo.jpg という名前がデフォルトのファイル名になります。
Content-Type だけの場合は IE の場合だと直接URLでメニューから保存をしたときにはjpgとして認識されないようで上手くいきません、右クリック保存ならContent-Typeだけでもgazou.php.jpgやgazou.jpgという風になります。
なので両方のヘッダを出力しておくのが無難だと思います。
どうもありがとうございます。
携帯、firefoxの場合は正常に処理できましたが、
IEで右クリック保存した場合は、やはり「bmp」と認識されてしまいました。
ファイル名は初めて知りました。
使ってみたいと思います。
VistaのIE7では右クリック保存でもいったんですが、XPのIE環境が先程は手元にないので試せませんでした。
ところで以下のように PATH_INFO を利用してリンクの書き方でURLが画像であるように見せかけるのはどうでしょうか?
<img src="http://aa.bb.com/gazou.php/foo.jpg?id=1">
php の後ろに/とセットでダミーのファイル名を書いてもきちんと対象の php で処理されるので php 側は何も変える必要がありません。
ちなみに /foo.jpg の部分は php からは $_SERVER['PATH_INFO'] で取得することも出来ます。
どうもありがとうございます。
XP&IE6の組み合わせでのバグなんですかねぇ・・・。
http://aa.bb.com/gazou.php/1.jpg
のように .jpg 等にしてみましたが、「BMP」でしか保存できなかったです。
普通は、「Content-Type: image/jpeg」だけで良いはずなんですが、IE6 は、Content-Type: ヘッダーではなくファイル名(拡張子)でファイルの種別を判断するというバグがあるので、うまく行かないのだと思います。
回答2で id:y-kawaz さんが書かれているように、ファイル名も指定すると IE6 でもうまく行くはずです。
# XP + IE6 で確認しました。
どうもありがとうございます。
それが、ファイル名指定もしているのですが、
何故かIE6では反映されないみたいで・・・。
数台のPCでチェックしましたが、同じ結果でした。
.htaccessは使えますか?
使えるのであれば、mod_rewriteを用いるのがベストです。
であるところを
としてアクセスできる方法を紹介します。
現在gazou.phpが置かれている場所に
RewriteEngine on
RewriteBase /
RewriteRule ^gazou_([0-9]+)¥.jpg gazou.php?id=$1 [L]
と書かれたhtaccess.txtというファイルをアップロードして、
その後 htaccess.txt から .htaccess へリネームしてください。
もし既にある場合には、追記する形で行えば問題ないでしょう。
どうもありがとうございます。
実は既にリライトしていて、
http://aa.bb.com/gazou.php/1.jpg
や
等にしましたが、結果は同じでした。
そのため、jpgで生成されていない気がしますが、
firefox等ではjpgで保存することができるので、よくわからない状態です。
どうもありがとうございます。
設定を「png」にしていました。。。
「jpeg」に修正したところ形態とfirefoxは直りましたが、
IEだと「bmp」のままでした。