PHP快速导出百万级数据到CSV或者EXCEL文件
一探PHP快速导出百万数据的奥秘——从CSV到EXCEL的完美转换
引言: 在大数据时代,我们经常需要从数据库导出大量数据以供分析或展示。本文将带你了解如何使用PHP在短短时间内导出百万级数据到CSV或Excel文件,让你轻松应对大数据挑战。让我们跟随狼蚁网站的SEO优化教程,一起来学习吧!
一、数据导出的思路与策略
当我们面对百万级数据的导出需求时,需要考虑服务器内存、程序运行时间以及数据格式化的细节。为了避免乱码问题,我们需要添加BOM头到CSV文件。为了降低内存压力,我们推荐采用循环导出的方式,每次导出一定数量的数据。
二、详细源码
以下是PHP导出数据的示例代码,你可以根据自己的数据库信息进行调整。实测导出百万条数据只需20秒。如果服务器硬件不支持一次读取大量数据,你可以适当降低每次导出的数量。
```php
// 让程序无限制运行
set_time_limit(0);
// 设置程序运行内存为128M
ini_set('memory_limit', '128M');
$fileName = '测试导出数据'; // 文件名
header('Content-Encoding: UTF-8'); // 设置编码格式
header("Content-type:application/vnd.ms-excel;charset=UTF-8"); // 设置内容类型为Excel格式
header('Content-Disposition: attachments;filename="' . $fileName . '.csv"'); // 告知浏览器下载文件而非打开文件内容
// 打开php标准输出流,准备写入CSV文件内容
$fp = fopen('php://output', 'a');
// 添加BOM头,确保CSV文件以UTF8编码格式导出,避免乱码问题
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
// 添加CSV文件的标题行
fputcsv($fp, array('姓名', '年龄', '地区'));
// 数据库连接信息,根据实际情况修改连接参数和数据库信息
$dsn = "mysql:host=数据库主机地址;port=数据库端口号;dbname=数据库名;charset=utf8";
$pdo = new PDO($dsn, '用户名', '密码');
// 循环导出数据,每次导出一定数量的数据以降低内存压力
$step = 100; // 循环次数
$nums = 10000; // 每次导出的数据量
for ($i = 0; $i < $step; $i++) {
$start = $i $nums; // 开始位置
$sql = "SELECT uname, age, city FROM `hd_test` LIMIT {$start}, {$nums}"; // SQL查询语句
$pdostatement = $pdo->query($sql);
$result = $pdostatement->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $item) {
fputcsv($fp, $item); // 将数据写入CSV文件
}
// 每导出一定量的数据就刷新缓冲区,确保数据及时输出到客户端
ob_flush();
flush();
}
fclose($fp); // 关闭文件流输出
?>
编程语言
- PHP快速导出百万级数据到CSV或者EXCEL文件
- php+ajax注册实时验证功能
- JS实现常见的TAB、弹出层效果(TAB标签,斑马线,
- SQL Server高级内容之case语法函数概述及使用
- PHP延迟静态绑定使用方法实例解析
- jquery验证手机号是否正确实例讲解
- js原生Ajax的封装和原理详解
- PHP使用ffmpeg给视频增加字幕显示的方法
- vs2010制作简单的asp.net网站
- PHP实现的一致性HASH算法示例
- MySQL主库binlog(master-log)与从库relay-log关系代码详解
- vue中,在本地缓存中读写数据的方法
- 浅谈用Webpack路径压缩图片上传尺寸获取的问题
- jsp 复选框使用方法
- JavaScript正则方法replace实现搜索关键字高亮显示
- JS制作类似选项卡切换的年历