5

暗号化された 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 文字もありません)。

4

3 に答える 3

8

ヘッダーを送信して解決しました

header('Pragma: public');
header('Cache-Control: max-age=0');

session_start() が独自にヘッダーを送信することを知りませんでした。

次のコメント セクションに回答が見つかりました:エラー: Internet Explorer は WebServer から FileName をダウンロードできません

于 2008-09-22T20:59:05.520 に答える
3

このサイトには、IE6 であなたと同様の問題があります。要約する:

デフォルトでは、session_start() は「no-store」を含むキャッシュ制御ヘッダーを送信します。Internet Explorer はこれを文字通りに解釈しすぎていますが、その場合の適切なエラー処理がなく、その結果、出力ページをディスクに保存しようとすると暗号化されて爆発します。

session_start() の前に、"session_cache_limiter('none');" を追加するか、その関数を調べて、必要に応じてリミッターを微調整します (おそらく、'private' の方が適切です)。

あなたが投稿したコード スニペットには への呼び出しが含まれていませんが、呼び出しがあり、session_start();表示されなかった場合に備えて、この可能な解決策を共有したいと思いました。

于 2008-09-22T20:30:47.133 に答える
0

これを使って

IE7 ブラウザで、[インターネット オプション] -> [セキュリティ] -> [カスタム レベル] -> [ダウンロード] に移動し、ファイル ダウンロードの自動プロンプトを有効にしました。

これで問題は解決します。

これが役立つことを願っています

于 2008-10-29T10:29:12.783 に答える