若做普通的数据导出功能,建议使用csv导出(fputcsv()函数),fputcsv()函数比PHPexcel要高效的多。
fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件。
该函数返回写入字符串的长度。若出错,则返回 false
测试代码
function test() {
set_time_limit(0); //防止超时
header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
header('Content-Disposition: attachment;filename=' . 'csv导出.csv');
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'a');
//将数据通过fputcsv写到文件句柄
fputcsv($fp, utf8_conv_gbk(['姓名', '年龄']));
$limit = 1000;
for ($i = 0; $i < 2000; $i++) {
if($i == $limit) {
//刷新输出缓冲(防止由于数据过多造成问题)
ob_flush();
flush();
}
//将数据通过fputcsv写到文件句柄
fputcsv($fp, utf8_conv_gbk(['姓名' . $i, '年龄'.$i]));
}
//关闭
fclose($fp);
}
封装csv导出类
class Export
{
protected $fp;
public function __construct($fileName)
{
set_time_limit(0);
$this->fp = fopen('php://output', 'a');
$this->header($fileName);
}
//header
protected function header($fileName)
{
header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
header('Content-Disposition: attachment;filename=' . $fileName . '.csv');
header('Cache-Control: max-age=0');
}
//将数据通过fputcsv写到文件句柄
public function put(array $row)
{
fputcsv($this->fp, utf8_conv_gbk($row));
}
//刷新输出缓冲
public function flush()
{
ob_flush();
flush();
}
//关闭
public function export()
{
fclose($this->fp);
}
}
引用执行
class TestOneExport {
public function fileExport()
{
$csvExport = new CsvExport('test');
$csvExport->put(['姓名', '年龄']);
$limit = 1000;
for ($i = 0; $i < 1000; $i++) {
if($i == $limit) {
$csvExport->flush();
}
$csvExport->put(['姓名'.$i, '年龄'.$i]);
}
$csvExport->export();
}
}