如何在CodeIgniter 3中通过代码实现一次批量下载多个Excel文件
CodeIgniter 3 实现批量下载多个Excel文件方案
核心逻辑:浏览器单次请求仅支持返回单个文件,因此需要先将生成的所有Excel文件打包为ZIP压缩包,再将压缩包作为响应返回给用户下载,用户解压后即可获取全部Excel文件。
实现步骤
1. 加载CI内置的Zip类
CodeIgniter 3自带Zip归档类,无需额外安装第三方依赖,直接在控制器方法中加载即可:
$this->load->library('zip');
2. 生成多个Excel文件并写入Zip
复用你现有生成单Excel的逻辑即可,生成每个Excel后不需要直接输出下载,把文件内容写入Zip包即可:
// 示例:生成3个Excel文件批量打包 $excel_list = [ '销售报表-202401.xlsx' => generate_excel_function('202401'), // 替换为你自己的生成Excel方法,返回文件内容 '销售报表-202402.xlsx' => generate_excel_function('202402'), '销售报表-202403.xlsx' => generate_excel_function('202403') ]; foreach ($excel_list as $filename => $excel_content) { // 将Excel内容添加到Zip包中 $this->zip->add_data($filename, $excel_content); }
如果你生成的Excel会先存到服务器临时目录,也可以用
$this->zip->read_file($excel_file_path, TRUE)方法直接读取本地文件添加到Zip,第二个参数设为TRUE可以只保留文件名,去掉服务器路径结构。
3. 输出Zip包供用户下载
设置对应响应头,直接输出Zip压缩包:
// 定义下载的压缩包文件名 $zip_filename = '批量销售报表_'.date('YmdHis').'.zip'; // 设置响应头 header('Content-Type: application/zip'); header('Content-disposition: attachment; filename="'.$zip_filename.'"'); // 输出Zip内容 echo $this->zip->get_zip(); // 终止后续输出 exit;
注意事项
- 如果生成的Excel文件较大、数量较多,建议先将生成的Excel存到服务器临时目录,打包完成后再删除临时文件,避免占用过多内存。
- 可以根据实际需求调整PHP的内存限制和最大执行时间,避免批量生成过程中程序中断。
内容的提问来源于stack exchange,提问作者Sonu Chohan
相关产品推荐
相关产品推荐

