PHP导出数据到Excel,支持大数据量

 

在日常的应用开发中,导出数据,是非常普通的需求,几乎成了必备项。在导出的文件格式中,常见的有 excel, txt, pdf, csv等。通常情况下EXCEL的格式,就是利用 CSV 的形式来实现的。


对于PHP的应用,操作EXCEL,有一些开源的类库,例如:PHPExcel 。


本文介绍的不是使用第三方的类库,而是使用PHP自带的功能,那就是 fputcsv 这个函数,fputcsv是PHP5引入的函数。


如果你使用的是PHP4,那么请使用自定义函数。


<?php

// 输出Excel文件头 

header('Content-Type: application/vnd.ms-excel;charset=gbk');

header('Content-Disposition: attachment;filename="文件名.csv"');

header('Cache-Control: max-age=0');


// 从数据库中获取数据 

$sql = 'select * from `table` where ……';

$stmt = @mysql->query($sql);


// PHP文件句柄,php://output 表示直接输出到浏览器 

$fp = fopen('php://output', 'a');


// 输出Excel列头信息 

$head = array('姓名', '性别', '年龄', 'Email', '电话', '……');

foreach ($head as $i => $v) {

    // CSV的Excel支持GBK编码,一定要转换,否则乱码 

    $head[$i] = iconv('utf-8', 'gbk', $v);

}


// 写入列头 

fputcsv($fp, $head);


// 计数器 

$cnt = 0;

// 每隔$limit行,刷新一下输出buffer,节约资源 

$limit = 100000;


// 逐行取出数据,节约内存 

while ($row = $stmt->fetch(FETCH_NUM)) {


    $cnt ++;

    if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题 

        ob_flush();

        flush();

        $cnt = 0;

    }


    foreach ($row as $i => $v) {

        $row[$i] = iconv('utf-8', 'gbk', $v);

    }

    fputcsv($fp, $row);

}

你可能感兴趣的:(PHP导出数据到Excel,支持大数据量)