php实现zip下载
PHP实现ZIP下载的方法
使用PHP创建ZIP文件并实现下载功能可以通过内置的ZipArchive类完成。以下是具体实现步骤:
创建ZIP文件并添加内容
$zip = new ZipArchive();
$filename = "archive.zip";
if ($zip->open($filename, ZipArchive::CREATE) === TRUE) {
// 添加文件到ZIP
$zip->addFile('path/to/file1.txt', 'file1.txt');
$zip->addFile('path/to/file2.jpg', 'images/file2.jpg');
// 添加字符串内容作为文件
$zip->addFromString('readme.txt', 'This is a sample text file content');
$zip->close();
} else {
exit('无法创建ZIP文件');
}
设置HTTP头并输出ZIP文件
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Length: ' . filesize($filename));
readfile($filename);
自动删除临时ZIP文件(可选)
unlink($filename); // 下载完成后删除服务器上的临时文件
完整示例代码
$zip = new ZipArchive();
$filename = "download_" . date('Y-m-d') . ".zip";
if ($zip->open($filename, ZipArchive::CREATE) === TRUE) {
// 添加示例文件
$zip->addFromString('sample1.txt', '这是第一个示例文件内容');
$zip->addFromString('sample2.txt', '这是第二个示例文件内容');
// 添加真实文件
if (file_exists('path/to/real_file.pdf')) {
$zip->addFile('path/to/real_file.pdf', 'document.pdf');
}
$zip->close();
// 发送给浏览器
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: ' . filesize($filename));
header("Pragma: no-cache");
header("Expires: 0");
readfile($filename);
unlink($filename); // 删除临时文件
exit;
} else {
echo '创建ZIP文件失败';
}
注意事项
确保服务器已安装并启用Zip扩展,可通过phpinfo()查看ZipArchive是否可用
对于大文件下载,考虑增加内存限制:
ini_set('memory_limit', '512M');
路径问题需要注意,addFile()使用的是服务器文件系统绝对路径
如果要打包整个目录,需要递归添加目录中的所有文件







