php实现百万级数据导出至excel

设置服务器内存
设置程序运行的最大时间
如果导出数量过大,推荐使用循环导出,每次循环这里以导出一万条为例,循环100次即可全部导出

// 设置运行时间
set_time_limit(0);
// 设置内存
ini_set('memory_limit', '1024M');

$outformat = urlencode("测试数据");
header("Cache-control: private");
header("Pragma: public");
header('Content-type: application/x-csv');
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5')) {
	header("Content-Disposition: inline; filename={$outformat}.csv");
} else {
	header("Content-Disposition: attachment; filename={$outformat}.csv");
    // 苹果电脑safari访问,解决文件名乱码
    header("Content-Disposition: attachment; filename*=utf-8''{$outformat}.csv");
}

$title = ['用户名', '年龄', '城市'];
$limit = 10000;
$page = 1;

$fp = fopen('php://output', 'a');
// 解决office乱码
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
fputcsv($fp, $title);
while (true) {
	$start = ($page - 1) * $limit;
	$sql = "SELECT uname,age,city FROM `hd_test` ORDER BY `id` LIMIT {$start},{$limit}";
    $result = $pdo->query($sql);
	if (!$result) {
		break;
	}

	foreach ($result as $item) {
		fputcsv($fp, $item);
	}

    // 刷新缓冲区
	ob_flush();
	flush();

	++$page;
}

fclose($fp);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值