php 資料匯出

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

最近在做後臺管理的專案,後臺通常有資料匯出到 excel 的需要,經過之前搜尋通常推薦使用的是 php excel ,我經常使用的是 laravel ,對於 php excel 也有很好用的對應 package。
開始使用是非常好用的,但是當需要匯出的資料達到上萬條時就直接帶來記憶體不足的問題。
然後我找到了幾個解決方案。

前端解決方案
PHP配合SheetJS/js-xlsx匯出Excel大量資料

這個方案好處的不需要額外的介面,但是要依賴於前端開發者。

匯出成 csv

該方案速度較快,完全後端實現,缺點是 csv 格式對匯出的形式要求比較高,要求是純資料,不能存在圖片之類的富文字形式。

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

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 使用可以方便快速匯出全部資料

參考連結

php 生成 csv 檔案
PHP建立的csv檔案在windows上亂碼的問題
BOM 百度百科
php 匯出大量資料

相關文章

程式語言 最新文章