php Zip( http://php.net/manual/de/book.Zip.php )で作成したZipファイル
今私はそれをブラウザに送る/それを強制的にダウンロードする必要があります。
<?php
// or however you get the path
$yourfile = "/path/to/some_file.Zip";
$file_name = basename($yourfile);
header("Content-Type: application/Zip");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length: " . filesize($yourfile));
readfile($yourfile);
exit;
?>
Content-type、content-length、およびcontent-dispositionヘッダーを設定して、ファイルを出力します。
header('Content-Type: application/Zip');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: '.filesize($filepath) );
readfile($filepath);
設定Content-Disposition: attachment
は、ブラウザにファイルを直接表示するのではなく、ダウンロードするように提案します。
サーバーにすでにZipがあり、このZipがApacheまたはHTTPまたはHTTPSで到達可能な場合、PHPで「読み取る」のではなく、このファイルにリダイレクトする必要がありますです。
はるかに効率的です PHPを使用しないのでCPUもRAMも必要ありません、そして---になりますダウンロードの高速化、PHPによる読み取り/書き込みも不要、直接ダウンロードのみ。Apacheで作業しましょう!
したがって、Nice関数は次のようになります。
if($is_reachable){
$file = $relative_path . $filename; // Or $full_http_link
header('Location: '.$file, true, 302);
}
if(!$is_reachable){
$file = $relative_path . $filename; // Or $absolute_path.$filename
$size = filesize($filename); // The way to avoid corrupted Zip
header('Content-Type: application/Zip');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Length: ' . $size);
// Clean before! In order to avoid 500 error
ob_end_clean();
flush();
readfile($file);
}
exit(); // Or not, depending on what you need
お役に立てば幸いです。
この方法で行う必要があります。そうしないと、Zipが破損します。
$size = filesize($yourfile);
header("Content-Length: \".$size.\"");
したがって、content-lengthヘッダーには実際の文字列と、filesizeの戻り値と整数が必要です。