php 數據導出

最近在作後臺管理的項目,後臺一般有數據導出到 excel 的須要,通過以前搜索一般推薦使用的是 php excel ,我常用的是 laravel ,對於 php excel 也有很好用的對應 package。
開始使用是很是好用的,可是當須要導出的數據達到上萬條時就直接帶來內存不足的問題。
而後我找到了幾個解決方案。php

這個方案好處的不須要額外的接口,可是要依賴於前端開發者。html

  • 導出成 csv

該方案速度較快,徹底後端實現,缺點是 csv 格式對導出的形式要求比較高,要求是純數據,不能存在圖片之類的富文本形式。前端

下面主要介紹一下導出 csv 的方式laravel

php 官方文檔 的介紹

<?php

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
?>

導出完整例子

<?php

$name = 'test';
header ( "Content-type:application/vnd.ms-excel" );
header ( "Content-Disposition:filename=".$name.".csv" );
header ('Cache-Control: max-age=0');

//打開PHP文件句柄,php://output 表示直接輸出到瀏覽器
$fp = fopen('php://output', 'a');    

// 寫入BOM頭,防止亂碼
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF)); 

// 生成的測試數據
function test()
{
    for ($i=0; $i < 150000; $i++) {
        yield ['name', $i, '男'];
    }
}

// 表頭
$headers = ['名字', '年齡', '性別'];

fputcsv($fp, $headers);

foreach (test() as $value) {
    fputcsv($fp, $value);
}

fclose($fp);
?>

在 laravel 中配合 chunk 使用能夠方便快速導出所有數據segmentfault

參考連接

php 生成 csv 文件
PHP建立的csv文件在windows上亂碼的問題
BOM 百度百科
php 導出大量數據windows

相關文章
相關標籤/搜索