溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)快速導(dǎo)出CSV的方法

發(fā)布時(shí)間:2021-06-28 16:16:17 來源:億速云 閱讀:391 作者:chen 欄目:編程語言

這篇文章主要講解了“php實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)快速導(dǎo)出CSV的方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“php實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)快速導(dǎo)出CSV的方法”吧!

php實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)導(dǎo)出這里使用了服務(wù)器的緩存來實(shí)現(xiàn)

實(shí)現(xiàn):

一:建立測試表,并加入測試數(shù)據(jù)

1:創(chuàng)建測試表

這里我建了一個(gè)test表,字段分別為:id,name,age,email

2:加入測試數(shù)據(jù)

(1)首先手動(dòng)向表中添加若干行數(shù)據(jù)

然后執(zhí)行如下命令批量添加數(shù)據(jù)

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

多次執(zhí)行上面的命令測試數(shù)據(jù)會(huì)呈指數(shù)增加,這樣就可以得到很多測試數(shù)據(jù)

二:php實(shí)現(xiàn)導(dǎo)出百萬級(jí)數(shù)據(jù)(這里我的查詢命令使用的時(shí)Yii框架自帶的查詢命令)

//讓程序一直運(yùn)行
set_time_limit(0);
//設(shè)置程序運(yùn)行內(nèi)存
ini_set('memory_limit', '128M');
//導(dǎo)出文件名
$fileName = '測試導(dǎo)出數(shù)據(jù)';
header('Content-Encoding: UTF-8');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
//打開php標(biāo)準(zhǔn)輸出流
$fp = fopen('php://output', 'a');
//添加BOM頭,以UTF8編碼導(dǎo)出CSV文件,如果文件頭未添加BOM頭,打開會(huì)出現(xiàn)亂碼。
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
//添加導(dǎo)出標(biāo)題
fputcsv($fp, ['姓名', '歲數(shù)', '郵箱']);
$nums = 10000; //每次導(dǎo)出數(shù)量
$count = Test::find()->count();
$step = ceil($count/$nums);//循環(huán)次數(shù)
for($i = 0; $i < $step; $i++) {
    $result = Test::find()
        ->select(['name', 'age', 'email'])
        ->limit($nums)
        ->offset($i * $nums)
        ->asArray()
        ->all();
    foreach ($result as $item) {
        fputcsv($fp, $item);
    }
    //每1萬條數(shù)據(jù)就刷新緩沖區(qū)
    ob_flush();
    flush();
}
exit;

如上測試后可以發(fā)現(xiàn)導(dǎo)出一百萬左右數(shù)據(jù)只需十幾秒左右時(shí)間,效率還算是不錯(cuò)的

感謝各位的閱讀,以上就是“php實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)快速導(dǎo)出CSV的方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)php實(shí)現(xiàn)百萬級(jí)數(shù)據(jù)快速導(dǎo)出CSV的方法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI