1. 程式人生 > 程式設計 >PHP快速匯出百萬級資料到CSV或者EXCEL檔案

PHP快速匯出百萬級資料到CSV或者EXCEL檔案

前言: 很多時候,因為資料統計,我們需要將資料庫的資料匯出到Excel等檔案中,以供資料人員進行檢視,如果資料集不大,其實很容易;但是如果對於大數集的匯出,將要考慮各種效能的問題,這裡以匯出資料庫一百萬條資料為例,匯出時間不過20秒,值的學習的一種大資料匯出方式。

一、匯出思路

  • 需要考慮伺服器記憶體
  • 需要考慮程式執行的最大時間
  • 缺少BOM頭導致亂碼的處理
  • 如果匯出數量過大,推薦使用迴圈匯出,每次迴圈這裡以匯出一萬條為例,迴圈100次即可全部匯出

二、匯出原始碼

  • 下面原始碼將資料庫資訊修改成自己的即可使用
  • 親測匯出一百萬條資料,3個欄位,不過20秒
  • 如果伺服器硬體不支援一次讀取一萬條資料,可將迴圈次數提高,匯出數量降低
<?php
  //讓程式一直執行
  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,['姓名','年齡','地區']);
  
  //連結資料庫
  $dsn = "mysql:host=127.0.0.1;port=3306;dbname=db_www;charset=utf8";
  $pdo = new PDO($dsn,'root','');
 
  $step = 100; //迴圈次數
  $nums = 10000; //每次匯出數量
 
  for($i = 0; $i < $step; $i++) {
    $start = $i * 10000;
    $sql = "SELECT uname,age,city FROM `hd_test` ORDER BY `id` LIMIT {$start},{$nums}";
    $pdostatement = $pdo->query($sql);
    $result = $pdostatement->fetchAll(PDO::FETCH_ASSOC);
    foreach ($result as $item) {
      fputcsv($fp,$item);
    }
    //每1萬條資料就重新整理緩衝區
    ob_flush();
    flush();
  } 

三、快速生成百萬條測試資料

這裡推薦資料庫的蠕蟲複製命令
先建好表後,插2條測試資料後,執行幾次下列命令,即可指數增長

INSERT INTO hd_test (uname,city) SELECT uname,city FROM hd_test;

到此這篇關於PHP快速匯出百萬級資料到CSV或者EXCEL檔案的文章就介紹到這了,更多相關PHP 匯出百萬級資料內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!