php中匯出大量資料的實現方法

來源:互聯網
上載者:User

在PHP開發的過程中有時候會有資料需要匯出,可以利用各種架構中的一些包來直接擷取資料然後丟入對應的處理方法就行了,但是當遇到大量的資料需要匯出的時候,我們就需要用其他的方法來實現了。

一般處理大資料有如下幾種解決辦法: 通過添加或者修改事件觸發指令碼,產生資料;定時任務執行指令碼產生資料;直接使用phpexcel匯出大量資料;採用fputcsv即時資料流方式寫入。用一張圖表示如下:

這裡主要記錄下使用fputcsv方式匯出資料。

public function exportData()    {           set_time_limit(0);        ini_set('memory_limit', '1024M');                $columns = [            '列名1', '列名2', '列名3'      //需要幾列,定義好列名        ];        //設定好告訴瀏覽器要下載excel檔案的headers        header('Content-Description: File Transfer');        header('Content-Type: application/vnd.ms-excel');        header('Content-Disposition: attachment; filename="匯出資料-'.date('Y-m-d', time()).'.csv"');        header('Expires: 0');        header('Cache-Control: must-revalidate');        header('Pragma: public');        $fp = fopen('php://output', 'a');//開啟output流        mb_convert_variables('GBK', 'UTF-8', $columns);        fputcsv($fp, $columns);//將資料格式化為CSV格式並寫入到output流中        //添加查詢條件,擷取需要的資料        $query = Model::class()->where();        //擷取總數,分頁迴圈處理        $accessNum = $query->count();        $perSize = 1000;        $pages   = ceil($accessNum / $perSize);                for($i = 1; $i <= $pages; $i++) {            $db_data = $query->limit($perSize)->offset(($i-1)*$perSize)->get();                        foreach($db_data as $key => $value) {                            $rowData = [];                //擷取每列資料,轉換處理成需要匯出的資料                //需要格式轉換,否則會亂碼                mb_convert_variables('GBK', 'UTF-8', $rowData);                fputcsv($fp, $rowData);            }            //釋放變數的記憶體            unset($db_data);            //重新整理輸出緩衝到瀏覽器            ob_flush();            //必須同時使用 ob_flush() 和flush() 函數來重新整理輸出緩衝。            flush();        }        fclose($fp);                exit();    }

這樣會一邊產生,一邊寫入下載檔案,提高處理速度。
之前使用的包處理,產生一個25M的資料,要20分鐘。這種方式處理需要1分多鐘(也和實際處理的環境有關)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.