PHP导出MySQL数据到Excel文件(fputcsv)

 更新时间:2011年07月03日 03:40:20   作者:  
经常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存使用上限。
这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。
复制代码 代码如下:

// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0');

// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql = 'select * from tbl where ……';
$stmt = $db->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写到文件句柄
fputcsv($fp, $head);

// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;

// 逐行取出数据,不浪费内存
while ($row = $stmt->fetch(Zend_Db::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获取文件名后缀常用方法小结

    php获取文件名后缀常用方法小结

    这篇文章主要介绍了php获取文件名后缀常用方法,实例分析了五种常用的php获取文件名后缀的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • php查看session内容的函数

    php查看session内容的函数

    之所以是能写出来这个函数,主要是对该网站的session结构清楚
    2008-08-08
  • PHP链表操作简单示例

    PHP链表操作简单示例

    这篇文章主要介绍了PHP链表操作,结合简单实例形式分析了php链表的定义与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • PHP异步进程助手async-helper

    PHP异步进程助手async-helper

    这篇文章主要介绍了PHP异步进程助手async-helper的详细用法以及相关代码实例,对此有需要的朋友学习下。
    2018-02-02
  • php实现网页上一页下一页翻页过程详解

    php实现网页上一页下一页翻页过程详解

    这篇文章主要介绍了php实现网页上一页下一页翻页过程详解,大致功能就是页面只显示几条信息,按上一页、下一页切换内容,当显示第一页时上一页和首页选项不可选,当页面加载到最后一页时下一页和尾页选项不可选,需要的朋友可以参考下
    2019-06-06
  • PHP获取一年中每个星期的开始和结束日期的方法

    PHP获取一年中每个星期的开始和结束日期的方法

    这篇文章主要介绍了PHP获取一年中每个星期的开始和结束日期的方法,涉及php对日期操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • php获取根域名方法汇总

    php获取根域名方法汇总

    这篇文章主要介绍了php获取根域名方法,实例汇总了常见的php获取根域名的方法,是非常实用的技巧,需要的朋友可以参考下
    2014-10-10
  • PHP生成随机数的方法总结

    PHP生成随机数的方法总结

    本篇文章给大家总结了PHP生成随机数的方法并把相关的代码做了分享,有需要的读者们参考学习下吧。
    2018-03-03
  • Zend Framework框架等常用php框架中存在的问题

    Zend Framework框架等常用php框架中存在的问题

    这篇文章主要介绍了Zend Framework框架等常用php框架中存在的问题
    2008-01-01
  • PHP isset()及empty()用法区别详解

    PHP isset()及empty()用法区别详解

    这篇文章主要介绍了PHP isset()及empty()用法区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论