• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jpeg画像を開かずダウンロードしてもらうには)

jpeg画像を開かずダウンロードしてもらう方法

このQ&Aのポイント
  • 現在製作しているサイトで、写真素材(jpeg画像)を配布するのですが、対象のファイルをダウンロードしてもらう際に、「右クリックで保存してください」ではなく、クリックしたら保存のダイアログが出てくるようにしたいと思い、調べた結果、以下のページを見つけました。
  • 上記サイトを参考にして(PHP)、思っていたことが実現できたのですが、1つ問題が発生しました。ダウンロードしたjpegファイルが、「Windows画像とFAXビューア」で「プレビューできません」となってしまいます。
  • 現在、以下のように書いております。$file_length = filesize($file); header("Content-Type: image/jpeg"); header("Content-Disposition: attachment; filename=".basename($file)); header("Content-Length:$file_length"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0,pre-check=0"); header("Pragma: private"); readfile ($file);

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

とりあえず、原因が分かっておりませんので、下手な鉄砲数打ちゃ当たる的な回答をしているという前提でお聞きください。 これで、解決するとも思えないのですが、とりあえず、試してみてください。という程度な発想です。 $type = mime_content_type($file); ← 追加 $file_length = filesize($file); header("Content-Type: {$type}"); ← 一部変更 header("Content-Disposition: attachment; filename=".basename($file)); header("Content-Length:$file_length"); readfile ($file); 「Windows画像とFAXビューア」が、ファイルのどこを見て判断してNGとしてるのか分かってませんので、正直 俺には これ以上はお手上げです。 photoshopは、多分 そこらへんは 結構 アバウトに何通りかのパターンを試して表示してくれてるんだと思います。 OKなのとNGなのを、バイナリで見比べてみると、多分 何か違いが見つかるとは思います。 ↓比較もできるバイナリエディタ http://www.vector.co.jp/soft/win95/util/se079072.html

sr-ki
質問者

お礼

再度のご回答本当にありがとうございます。 最後の「バイナリで見比べてみる」というのを見て、とりあえずダメな画像をテキストエディタで開いてみたところ、一番上に以下のPHPエラーが入っていました。これが原因だったようです。 <br /> <b>Warning</b>: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for http://-----/---.jpg in <b>/virtual/-----/------/download.php</b> on line <b>6</b><br /> なぜfilesize()がダメなのかはわからないのですが、その行をコメントアウトしたら正常になりました。

その他の回答 (2)

回答No.3

念のため、確認ですが、 ・Content-Lengthの行を消したらどうなりますか? →取得しているファイルサイズが若干違っている可能性を考慮してみる。 ・その記述の下に、半角改行だとか何かしら不正なものが含まれてたりしませんか →<?php //という囲いがあった場合に、 ?> <!--ここらへんにゴミがあったりする場合がないか--> 一番いいのは、一番最後の「?>」を消すことです。 <?php という先頭のタグだけあれば、PHPは正常に動作するので。 ・それでもダメなら、readfileを変えてみる <?php echo file_get_contents($file); ?> に変えても同じ動作をするのか。 とか。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> ・ファイルを右クリックで保存した場合の方が、ファイルサイズが微妙に小さくなります。 とりあえず、俺なら 以下の三行をカットしてみて、どうなるか試してみます。 header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0,pre-check=0"); header("Pragma: private");

sr-ki
質問者

お礼

ご指摘の行をカットしてみましたが、同じ結果でした。 他にもいろいろ試してみます。 ご回答ありがとうございました。

関連するQ&A