php Excel 导出大批量数据解决方案

1,通过PHP输出流方式导出
php://output是一个可写的输出流,允许程序像操作文件一样将输出写入到输出流中,PHP会把输出流中的内容发送给web服务器并返回给发起请求的浏览器 保存为csv文件
2, 刷新一下输出buffer,防止由于数据过多造成问题 ;
ob_flush();  flush();配合使用
3,实现代码
/**
 * 导出CSV
 * @param        $rows
 * @param string $file_name
 */
function exportCsv($rows, $file_name = '数据')
{
    $filename =  $file_name. date('YmdHi') . '.csv'; //设置文件名
    header("Content-type:text/csv");
    header("Content-Disposition:attachment;filename=\"" . $filename . "\"");
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');

    $fp    = fopen('php://output', 'a');
    $cnt   = 0; // 计数器
    $limit = 5000; // 每隔$limit行,刷新输出buffer

    //加上bomtou utf-8正常显示,但编辑之后会有问题,要另存为xls、xlsb、xlsx等格式
    fwrite($fp, "\xEF\xBB\xBF");

    foreach ($rows as $row) {
        $cnt++;
        if ($limit == $cnt) { //刷新输出buffer,防止由于数据过多造成问题
            ob_flush();
            flush();
            $cnt = 0;
        }
        fputcsv($fp, $row);
        unset($v);
        unset($row);
    }
}

猜你喜欢

转载自www.cnblogs.com/weedsyl/p/11646144.html