<?php
// 输出Excel文件头,可把goods.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="goods.csv"');
header('Cache-Control: max-age=0');
$conn = mysql_connect('localhost', 'root', 'root') or die();
mysql_select_db('yipai', $conn);
mysql_query('set names utf8');
// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql = 'select * from goods';
$result = mysql_query($sql);
// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');
// 输出Excel列名信息
$head = array('商品名称','价格','分类','图片','描述','商品详情','状态','添加时间');
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 = mysql_fetch_assoc($result)) {
$cnt++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}
foreach ($row as $j => $v) {
$row[$j] = iconv('utf-8', 'gbk', "\t".$v."\t"); //解决php导出excel长数字变成科学计数法,在变量前后拼接上制表符"\t",一定要双引号
}
fputcsv($fp, $row);
}
//关闭文件句柄
fclose($fp);
//关闭数据库
mysql_close($conn);
?>
导出文件格式为 .csv,如果想要 .xls 文件,则打开 .csv 文件另存为 .xls 文件即可。
将该文件放在php环境中,使用时,在浏览器直接输入文件地址即可导出,如:localhost/my/to_excel.php。