4

私はphpZipArchiveを使用して、オンザフライでzipファイルを作成し、それをユーザーに送り返しています。zipファイルをドキュメントルートの上のフォルダーに一時的に保存してから、コードとともに送り返します

header('Content-type:application/zip');
header('Content-Disposition: inline; filename="'.("file.zip").'"');
header("Content-Transfer-Encoding: binary");
header("Content-Length:".filesize($file));
$fh = fopen($file,'rb');
fpassthru($fh);

最初に発行した後

$zip->close()

ファイルが開いていないことを確認します。私が遭遇した問題はこれです-保存されたzipファイルはWindows7、7Zip、WinZIPなどで開くことができる有効なアーカイブです。しかし、上記のコードでファイルを送信すると、0xD0xAペアになりますファイルの先頭で、ファイルを破損させるのに十分です。それらのキャラクターがどこから来ているのかわかりません。これはfopen/fpassthruの既知のバグですか?どんな助けでも大歓迎です。

4

4 に答える 4

16

行を削除するheader("Content-Length:".filesize($file));と、まったく同じ問題が修正されたことがわかりました...

于 2012-11-23T11:34:18.437 に答える
12

zipファイルのダウンロードを何度も試みた後、解決策は次のとおりでした。

$result = create_zip($files_to_zip,$fileZip,true,$path_parts['dirname']);
ob_clean();
ob_end_flush(); // more important function - (without - error corrupted 
zip)
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header('Content-Type: application/zip;\n');
header("Content-Transfer-Encoding: Binary");
header("Content-Disposition: attachment; filename=\"".basename($fileZip)."\"");
readfile($fileZip);
unlink($fileZip);
exit();
于 2016-08-26T13:34:03.527 に答える
4

完全なスクリプトはどのように見えますか?

一般的に言えば、スクリプトファイルの最後にある終了PHPタグはすべて削除する必要があります。これは、おそらくスクリプトの最後または含まれているスクリプトからの出力であるためです。

于 2012-11-23T11:24:47.450 に答える
0

ありがとう@_on!あなたはこの情報を手伝ってくれました。しかし、削除する代わりに、header ("Content-Length:". Filesize ($ file)) ;改行「\\ n」を挿入し、次のようにしました。

header ("Content-Length:". filesize ($ file). "\\n");

そして、ファイルはダウンロードを支援するためにそのサイズを生成しました。Tks

于 2019-08-04T13:14:45.593 に答える