php 文件流的形式下载csv

使用文件流下载csv原因

使用php 下载excel 经常会因为文件太大 导致内存不足 下载失败

直接上代码



 $columns = [
            'u_id',
            '用户姓名'
        ];

$items=[["u_id"=>1,"用户姓名"=>"x1"],["u_id"=>2,"用户姓名"=>"x2"]];

//定义文件名称
 $csvFileName = date("Ymd").'hero.csv';
//设置好告诉浏览器要下载excel文件的headers
 header('Content-Description: File Transfer');
 header('Content-Type: application/vnd.ms-excel');
 header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
 header('Expires: 0');
 header('Cache-Control: must-revalidate');
 header('Pragma: public');
 $fp = fopen('php://output', 'a');//打开output流
  fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF)); //处理中文乱码
 mb_convert_variables('UTF-8', 'UTF-8', $columns);
 fputcsv($fp, $columns);//将数据格式化为CSV格式并写入到output流中
 $accessNum =count($items);
 $perSize=1000; //设置每次下载数量
 $pages   = ceil($accessNum / $perSize);
for($i = 0; $i < $pages; $i++) {
    $rowDatas = array_slice($items,$i*$perSize,1000);
    foreach ($rowDatas as $rowData){
      mb_convert_variables('UTF-8', 'UTF-8', $rowData);//utf-8入   utf-8出
      fputcsv($fp, $rowData);
    }
   unset($accessLog);//释放变量的内存
   //刷新输出缓冲到浏览器
   ob_flush();
   flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
}
fclose($fp);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。