PHP导出大量数据到csv表

对于做后台开发的码农来说,从excel导入数据到数据库亦或者是从数据库导出数据到excel都是很常见的操作。由于经常遇到这样的场景,也因为从数据库导出数据到表格所遇到的坑有很多,所以需要另辟途径来进行这种场景优化。

如果是小量的数据导出到excel的表格的话,一般不会有太多效率和资源占用的问题,但是当数据量变得庞大了,例如20万或者50万的时候就会造成PHP处理的瓶颈,要么内存溢出要么脚本运行超时。当然PHP是相对于比较灵活的,大可在方法运行的时候单独更改超时时间和脚本运行内存。但是这都是于事无补的,一般xls的格式最大支持六万行的数据左右,所以到了六万行的时候就凉凉了。

后续查阅资料发现csv是可以支持无限行数的,只要你的电脑能支持打开就能不断的往里面塞数据。

CSV格式文件最大行数是没有上限的,在国外科学数据网站下载的CSV文件有几十G上百G,行数多大几十亿上百亿行;但是大文件CSV打开编辑的软件就基本没有,Excel、wps、openoffice紧支持打开编辑前面1048576行;snapde软件支持的行数多一些,一次可以打开编辑一两千万行的CSV数据,速度超快。

代码

<?php
public function exportWarehouseManagementToExcel()
    {
        ini_set(‘max_execution_time‘, 300);// 设置PHP超时时间
        ini_set(‘memory_limit‘, ‘2048M‘);// 设置PHP临时允许内存大小
        $querySql = "SELECT * FROM fsyz_cpInventory WHERE 1=1";//导出所有的数据
        $queryResult = $this->db->query($querySql)->result_array();

        //路径
        $fileName = ‘车管驻点业务寄递仓库管理所有数据‘ . date(‘Ymd_His‘) . ‘.csv‘;
        $filePath = ‘excel/‘ . $fileName;
        $index = 0;
        $fp = fopen($filePath, ‘w‘); //生成临时文件
        chmod($filePath, 0777);//修改可执行权限
        // 将数据通过fputcsv写到文件句柄
        $header = array(‘车牌号码‘, ‘车牌类型‘, ‘所在区域‘, ‘状态‘, ‘入库时间‘);//设置表头
        fputcsv($fp, $header);
        //处理导出数据
        foreach ($queryResult as $key => &$val) {
            foreach ($val as $k => $v) {
                $val[$k] = $v . "\t";
                if ($index == 10000) { //每次写入1000条数据清除内存
                    $index = 0;
                    ob_flush();//清除内存
                    flush();
                }
                $index++;
            }
            fputcsv($fp, $val);
        }
        ob_flush();
        fclose($fp);  //关闭句柄
        header("Cache-Control: max-age=0");
        header("Content-type:application/vnd.ms-excel;charset=UTF-8");
        header("Content-Description: File Transfer");
        header(‘Content-disposition: attachment; filename=‘ . basename($fileName));
        header("Content-Type: text/csv");
        header("Content-Transfer-Encoding: binary");
        header(‘Content-Length: ‘ . filesize($filePath));
        @readfile($filePath);//输出文件;
        unlink($filePath); //删除压缩包临时文件
        echo $filePath;
        return;
    }

转载:

https://199508.com/post/2064

原文地址:https://www.cnblogs.com/yehuisir/p/11521226.html

时间: 2024-11-05 22:00:09

PHP导出大量数据到csv表的相关文章

php导出excel数据使用csv替代xls格式

php导出excel数据使用csv替代xls格式 一直以来需要将某些后台数据导出来以供运营人员查看,因为他们都用excel.所以最初的选择是用phpExcel这个工具包来实现导出数据为xls格式,后来发现数据量比较大的情况下(超过1W),就比较慢了. http://www.zroran.com/it/php/9.html 之前使用phpexcel的过程如下 $objPHPExcel = new PHPExcel(); $excelobj = $objPHPExcel->setActiveShee

导出大量数据到excel表

set_time_limit(0);error_reporting(0); // 输出Excel文件头,可把user.csv换成你要的文件名header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="user.csv"');header('Cache-Control: max-age=0'); $fp = fopen('/tmp/export/dat

angular6 导出json数据到excal表

1 首先使用npm下载插件依赖的安装包 npm install file-saver --save npm install xlsx --save 2 引入项目中的ts文件中 import * as FileSaver from 'file-saver'; import * as XLSX from 'xlsx'; 3  写一个exportList(){ }方法,点击导出按钮时执行此方法,导出文件 1 exportList() { // json 示例     let json = [{"姓名&

shell导出mysql数据成csv格式

#!/bin/bash function usage {        echo "Usage: $0 [OPTIONS]               -h  host --optional              -P  port --optional              -u  user              -p  password              -d  dbname              -t  tablename              -o  outpu

oralce 超过1亿条数据的数据库表清理实践

2018-08-18 16:58 无腿鸟 阅读(331) 评论(0) 编辑 收藏 问题:当一个表的数据量超过一亿条,要删除其中的5000w条,如何处理. 如果直接使用delete语句,会涉及到到大量的磁盘IO,并产生大量的数据库日志,效率很低,删除速度慢,可能导致事务中断,甚至有服务器硬盘空间撑爆的可能. 本文提供的思路是先将数据表需要保留的数据不带索引导出,然后导入一个新表中 ,对新表重建索引后将老表.新表进行重命名,这样就完成了删除操作,效率有了很大提升. 主要分为三步,1.数据导出2. 数

Oracle通过PL/SQL Developer导出数据为CSV格式,VARCHAR2类型的字段如果存入的是数值(例如3307830000004059)太长,最后一位会被置为0

问题描述: Oracle通过PL/SQL Developer导出数据为CSV格式,VARCHAR2类型的字段如果存入的是数值(例如3307830000004059)太长,CSV文件该列会用科学计数法表示,即使选择该列,点击数据--.>分列,固定宽度,列数据格式选择文本,最后一位仍然会被置为0. 解决方法: Oracle通过PL/SQL Developer导出数据为CSV格式,新建一个Excel文件,点击数据-->自文本,选择之前导出的CSV文件,文件类型分隔符号,选择逗号,[选中所有列],然后

用php导入10W条+ 级别的csv大文件数据到mysql。导出10W+级别数据到csv文件

转自:http://blog.csdn.net/think2me/article/details/12999907 1. 说说csv 和 Excel 这两者都是我们平时导出或者导入数据一般用到的载体.两者有什么区别呢?csv 格式更兼容一点.那么共同点都是GBK格式的,非UTF8.所以我们上传文件的时候,老是出现乱码,就是编码问题没有转好导致. 2. 推荐的几种方法 1. 函数 fgetss($handel);  返回字符串.它就是strip_tags(fget($handel))的组合读取cs

c# .Net :Excel NPOI导入导出操作教程之数据库表信息数据导出到一个Excel文件并写到磁盘示例分享

  string sql = @"select * from T_Excel"; ----------------DataTable Star----------------        DataTable dt = SqlHelper.ExecuteDataTable(sql);        if (dt.Rows.Count > 0)        {            //创建工作簿            IWorkbook workbook = new HSSFW

Nodejs fastCSV 实现数据的csv格式导出

Nodejs实现CSV格式的数据导出 使用的第三方包: fast-csv: npm install fast-csv async: npm install async mysql: npm install mysql 在这个实现中使用mysql数据源将mysql中的数据导入到对应的csv文件中. /** * 实现dump数据到csv文件数据中 * 导出csv数据模版 **/ var config = require('./info.json'); var fs = require("fs&quo