最近在做后臺管理的項目,后臺通常有數據導出到 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 使用可以方便快速導出全部數據。
以上就是本次知識點的全部內容,感謝大家對VeVb武林網的支持。
新聞熱點
疑難解答
圖片精選