首頁 >後端開發 >PHP問題 >php如何實現百萬級資料快速匯出CSV

php如何實現百萬級資料快速匯出CSV

醉折花枝作酒筹
醉折花枝作酒筹轉載
2021-06-28 15:48:523050瀏覽

在php中,可以使用了伺服器的快取來實現百萬級資料快速匯出CSV,今天就帶大家學習快速匯出csv的方式,有需要的可以參考參考。

php如何實現百萬級資料快速匯出CSV

php實作百萬資料匯出這裡使用了伺服器的快取來實作

實作:

一:建立測試表,並加入測試資料

1:建立測試表

這裡我建了一個test表,欄位分別為:id,name,age,email

2:加入測試資料

(1)先手動新增若干行資料

然後執行如下指令批次新增資料

INSERT INTO test (name,age,email) SELECT name,age,email FROM test;

多次執行上面的指令測試資料會呈指數增加,這樣就可以得到很多測試資料

二:php實作匯出百萬級資料(這裡我的查詢指令使用的時Yii框架自帶的查詢指令)

//让程序一直运行
set_time_limit(0);
//设置程序运行内存
ini_set('memory_limit', '128M');
//导出文件名
$fileName = '测试导出数据';
header('Content-Encoding: UTF-8');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
//打开php标准输出流
$fp = fopen('php://output', 'a');
//添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
//添加导出标题
fputcsv($fp, ['姓名', '岁数', '邮箱']);
$nums = 10000; //每次导出数量
$count = Test::find()->count();
$step = ceil($count/$nums);//循环次数
for($i = 0; $i < $step; $i++) {
    $result = Test::find()
        ->select([&#39;name&#39;, &#39;age&#39;, &#39;email&#39;])
        ->limit($nums)
        ->offset($i * $nums)
        ->asArray()
        ->all();
    foreach ($result as $item) {
        fputcsv($fp, $item);
    }
    //每1万条数据就刷新缓冲区
    ob_flush();
    flush();
}
exit;

如上測試後可以發現導出一百萬左右資料只需十幾秒左右時間,效率還算是不錯的

以上是php如何實現百萬級資料快速匯出CSV的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除