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

CodeIgniter框架导出CSV时浏览器下载文件打开为空问题求助

问题根因

你的代码仅将CSV内容写入了服务器本地磁盘的指定文件,没有将内容输出到HTTP响应流,浏览器仅接收到下载响应头,无实际文件内容,因此下载的文件为空,服务器本地存储的文件是完整的。

修复方案

在写完本地文件后新增内容输出逻辑即可,同时补充几个常见问题的兼容处理:

  • 清空输出缓冲区,避免框架输出的调试信息、多余空格污染CSV内容
  • 新增UTF-8 BOM头,解决Office打开CSV中文乱码问题
  • 声明文件长度,提升下载稳定性
  • 输出完成后终止程序,避免后续代码输出多余内容
修正后控制器代码
public function export_webdata($p_id,$inptid){
    $project = $this->Lead_Model->get_project_single($p_id);
    $filename = $project[0]->p_name.'_WebsiteInfo_'.time().'.csv';
    $path = getcwd().'/public/files/'.$project[0]->p_name.'/';
    if (!file_exists($path)){
        mkdir($path, 0777, true);
    }
    $full_file_path = $path . $filename;
    
    // 写入本地服务器文件
    $output = fopen($full_file_path, 'w');
    $header = array("Company","Country","Website");
    fputcsv($output, $header);
    $extdata = $this->Lead_Model->webdata_export($inptid);
    foreach ($extdata as $key=>$line){
        fputcsv($output,$line);
    }
    fclose($output);

    // 输出文件到浏览器
    ob_clean();
    header('Content-Type: text/csv; charset=utf-8');  
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Content-Length: ' . filesize($full_file_path));
    // 输出UTF-8 BOM
    echo chr(0xEF) . chr(0xBB) . chr(0xBF);
    readfile($full_file_path);
    exit;
}
可选优化

如果你不需要在服务器留存CSV文件,可以直接写入php://output流,无需写本地磁盘,节省服务器存储空间:

public function export_webdata($p_id,$inptid){
    $project = $this->Lead_Model->get_project_single($p_id);
    $filename = $project[0]->p_name.'_WebsiteInfo_'.time().'.csv';

    ob_clean();
    header('Content-Type: text/csv; charset=utf-8');  
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    echo chr(0xEF) . chr(0xBB) . chr(0xBF);

    $output = fopen('php://output', 'w');
    $header = array("Company","Country","Website");
    fputcsv($output, $header);
    $extdata = $this->Lead_Model->webdata_export($inptid);
    foreach ($extdata as $key=>$line){
        fputcsv($output,$line);
    }
    fclose($output);
    exit;
}
排查验证建议

如果修改后仍有问题,可按以下步骤排查:

  • 临时打印$extdata的内容,确认模型查询返回了有效数据,避免查询条件不匹配导致无数据
  • 检查框架是否有自动输出的模板内容、调试日志,确保输出缓冲区被正确清空

内容的提问来源于stack exchange,提问作者Jackson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03