PHP如何快速导出百万级数据到EXCEL_优品建站

PHP如何快速导出百万级数据到EXCEL

1. 前言:
  很多时候,因为数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易;但是如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百万条数据为例,导出时间不过20秒,值得学习的一种大数据导出方式。
2.导出思路
  需要考虑服务器内存
  需要考虑程序运行的最大时间
  缺少BOM头导致乱码的处理
  如果导出数量过大,推荐使用循环导出,每次循环这里以导出一万条为例,循环100次即可全部导出
3.导出源码
  下面源码将数据库信息修改成自己的即可使用
  亲测导出一百万条数据,3个字段,不过20秒
  如果服务器硬件不支持一次读取一万条数据,可将循环次数提高,导出数量降低
<?php
    //让程序一直运行
    set_time_limit(0);
    //设置程序运行内存
    ini_set('memory_limit', '128M');

    $fileName = '测试导出数据';
    header('Content-Encoding: UTF-8');
    header("Content-type:application/vnd.ms-excel;charset=UTF-8");
    header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');

    //打开php标准输出流
    $fp = fopen('php://output', 'a');

    //添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
    fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
    //添加导出标题
    fputcsv($fp, ['姓名', '年龄', '地区']);

    //链接数据库
    $dsn = "mysql:host=127.0.0.1;port=3306;dbname=db_www;charset=utf8";
    $pdo = new PDO($dsn, 'root', '');

    $step = 100; //循环次数
    $nums = 10000; //每次导出数量

    for($i = 0; $i < $step; $i++) {
        $start = $i * 10000;
        $sql = "SELECT uname,age,city FROM `hd_test` ORDER BY `id` LIMIT {$start},{$nums}";
        $pdostatement = $pdo->query($sql);
        $result = $pdostatement->fetchAll(PDO::FETCH_ASSOC);
        foreach ($result as $item) {
            fputcsv($fp, $item);
        }
        //每1万条数据就刷新缓冲区
        ob_flush();
        flush();
    }
4.快速生成百万条测试数据
  这里推荐数据库的蠕虫复制命令
  先建好表后,插2条测试数据后,执行几次下列命令,即可指数增长
  INSERT INTO hd_test (uname,age,city) SELECT uname,age,city FROM hd_test;

  • uniapp实现多端开发, PHP写api接口的一些注意事项与安全策略
    市面上很多关于多端开发的框架,比较常用,流行的框架 uni-app,Chameleon(变色龙),taro这些,都可以支持多端,一套代码,8个平台支持。
  • php也是可以做直播相关业务开发的
    如今的直播平台到处都是了,自己动手用PHP去做一个视频直播,那是可以的,你可以用到swoole。但是会花很长时间去开发与测试吧!也不知道开发出来的效果会不会不稳定。
  • 什么是JWT认证,PHP是如何实现JWT认证的?
    JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。
  • 统计在线人数,用php如何来实现 ?
    一个业务系统网站每天人数的访问量是多少,在线人数是多少?这种业务我们在开发中就要预留,也是在我们的设计范围内的咯!因为一个正在运营的网站,每天都会用到统计。
  • php中smart_str对比smart_string
    在阐述智能字符串之前,先看看其实现所依赖的基本结构smart_str与smart_string结构体的异同。
  • PHP上下分页功能的实现过程
    PHP上下分页功能以当前页码为基础,实现上一页和下一页的跳转,并且输出上一页中最后一条数据和下一页中第一条数据的内容。
  • php数据解析与分隔应用
    在项目开发中,难免会对各种数据进行解析分析。要求你抽取出数据的各个组成部分,从而判断整个数据是否满足业务需求,比如以下场景。
  • php如何在数组中查找值?
    如果想要查找一个值在数组中的位置,则可以使用array_search()函数进行。
  • PHP的一些安全设置,你都设置过没 ?
    PHP的安全设置包括:1、屏蔽PHP错误输出;2、屏蔽PHP版本;3、关闭全局变量;4、文件系统限制;5、禁止远程资源访问;
  • PHP7的抽象类和接口的介绍及应用
    抽象类和接口都是不能被实例化的特殊类,可以在抽象类和接口中保留公共的方法,将抽象类和接口作为公共的基类。
  • 网站制作 服务

    免费网站制作报价,免费优化,1对1服务,个性化定制服务

    pc和wap网站制作

    多年建站经验,上千个成功案例,
    为您提供一站式服务

    网站维护改版

    大厂经验工程师对现有网站进行
    改版,修复,维护。

    小程序制作

    微信小程序,支付宝小程序,
    百度小程序

    响应式网页设计

    响应式网页设计可以与多种设备兼容,
    如智能手机,平板电脑和PC