You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:36:04