IE7ではファイルをダウンロードできないのですが、FirefoxやChromeなどでは問題ないのでしょうか?
-
02-07-2019 - |
質問
暗号化された URL を受け取り、そこからダウンロードを生成するスクリプトがあります。このスクリプトの最も批判的な部分は次のとおりです。
$MimeType = new MimeType();
$mimetype = $MimeType->getType($filename);
$basename = basename($filename);
header("Content-type: $mimetype");
header("Content-Disposition: attachment; filename=\"$basename\"");
header('Content-Length: '. filesize($filename));
if ( @readfile($filename)===false ) {
header("HTTP/1.0 500 Internal Server Error");
loadErrorPage('500');
}
ダウンロードは IE 以外のどのブラウザでも魅力的に機能します。「キャッシュなし」ヘッダーに関連する問題を見たことがありますが、そのようなものは送信しません。UTF-8 文字について話していますが、何もありません。 utf-8 characters
($filename には utf-8 文字も含まれていません)。
解決
このサイト IE6 にも同様の問題があります。要約する:
session_start() はデフォルトで、「no-store」を含むキャッシュ制御ヘッダーを送信します。Internet Explorerは文字通りこれを少し取り上げますが、ケースに適切なエラー処理がありません。その結果、出力ページをディスクに保存しようとすると、不可解に爆発します。
session_start()の前に、「session_cache_limiter( 'none'); "を追加するか、その関数を調べてリミッターを適切に調整します(おそらく「プライベート」はマークに近い)。
あなたが投稿したコード スニペットには、への呼び出しが含まれていないことに気づきました。 session_start();
, しかし、実際に電話をかけてきたのに表示されなかった場合に備えて、この考えられる解決策を共有しておこうと思いました。
他のヒント
ヘッダーを送信することで解決しました
header('Pragma: public');
header('Cache-Control: max-age=0');
session_start() が独自にヘッダーを送信することを知りませんでした。
次のコメントセクションで答えを見つけました。 エラー:Internet Explorer が Web サーバーから FileName をダウンロードできない
これを使って
IE7ブラウザでは、インターネットオプション - >セキュリティ--->カスタムレベル - >ダウンロードに移動してから、ファイルのダウンロードのために自動化プロンプトを有効にしました。
これで問題は解決します。
これが役立つことを願っています