ダウンロード用のzipファイルをプッシュする次のコードがあります。
$filename = "ResourcePack_".time().".zip";
$destination = $basepath."downloads/$filename";
if($this->createdownload($files,$destination,false)){
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$destination").";");
header("Content-Disposition: attachment; filename='$filename'");
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
ob_end_flush();
@readfile($destination);
if(file_exists($destination)){
unlink($destination);
}
}
サーバー上でファイルが作成されているのがわかるので、createdownload 関数が正常に zip ファイルを生成するように機能していることはわかっています。問題は、ファイルがダウンロード ストリームを開くのではなく、大量のゴミとしてブラウザに書き込まれていることです。ヘッダーに何か不足していますか?
編集
私が正しかった。私の問題はphpではありませんが、JQuery $.ajax呼び出しを介してこのコードを生成するphpファイルを呼び出すことが問題です。$.ajax を使用すると、Accept-Encoding 要求ヘッダーが zip ファイルと互換性のない値に自動的に設定されます。したがって、 $.ajax を使用する代わりに、単純な window.open javascript コマンドを使用して同じ php ページを呼び出すだけで、ヘッダーで問題なく動作します。