次のコードを使用して、PHP経由でファイルを強制的にダウンロードしているサイトがあります。
$ZipData = file_get_contents($zipFilename);
$ZipSize = filesize($zipFilename);
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".$ZipTitle.".zip");
echo $ZipData;
これはChromeとFirefoxで完全に機能しますが、InternetExplorerでは何もしません。グーグル中に私は潜在的な解決策を見つけ、コードを次のように変更しました:
$ZipData = file_get_contents($zipFilename);
$ZipSize = filesize($zipFilename);
if (strstr($HTTP_USER_AGENT,"MSIE")){
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-type: application-download");
header("Content-Length: $ZipSize");
header("Content-disposition: attachment; filename=".$ZipTitle.".zip");
header("Content-Transfer-Encoding: binary");
}else{
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".$ZipTitle.".zip");
}
echo $ZipData;
しかし、それでも運はありません。なぜ失敗するのか、どこからエラーや問題を探し始めるのかわかりませんが、これは私が気付いていないIEのバグですか?どこから解決策を見つけようとすればよいですか?
注:$ZipTitleは常に'TexturePacker_Pack_xxx'になります。ここで、xxxは増分された数値です。$ ZipFilenameは、ファイルがブラウザに送信された後にリンクが解除される既存のzipファイルです。
編集:問題のサイトとコードはhttp://www.texturepacker.netで動作しています