PHP快速导出百万级数据到CSV或者EXCEL文件

网络编程 2025-03-28 21:26www.168986.cn编程入门

一探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+ajax注册实时验证功能 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by