在PHP開發的過程中有時候會有數據需要導出,可以利用各種框架中的一些包來直接獲取數據然后丟入對應的處理方法就行了,但是當遇到大量的數據需要導出的時候,我們就需要用其他的方法來實現了。
一般處理大數據有如下幾種解決辦法: 通過添加或者修改事件觸發腳本,生成數據;定時任務執行腳本生成數據;直接使用phpexcel導出大量數據;采用fputcsv實時數據流方式寫入。用一張圖表示如下:
這里主要記錄下使用fputcsv方式導出數據。
html' target='_blank'>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分多鐘(也和實際處理的環境有關)。
相關推薦:
PHP csv大量數據導出分割處理
php導入大量數據到mysql(示例)
以上就是php中導出大量數據的實現方法的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答