php 匯出大量資料到資料表

2022-06-10 05:06:07 字數 1612 閱讀 6021

一般方式匯出(資料量少的方式匯出)是先一次性從資料讀取所需的資料,然後執行一次性匯出操作。

百萬級大資料量如果按這種方式匯出,主要會遇到哪些問題呢?

執行時間長,很容易超時

伺服器記憶體不夠,百萬級的資料從資料庫一次性讀取消耗的記憶體會導致伺服器記憶體溢位,從而導致匯出失敗

匯出的excel檔案比較大,且excel有行數限制

set_time_limit (0); //

取消指令碼執行時間的限制

csv相比於excel檔案有其一定的優勢:

一般xls的格式最大支援六萬行的資料左右,csv格式檔案對資料的行數沒有限制,而且csv檔案占用空間比excel檔案小。

但是excel、wps、openoffice緊支援開啟編輯前面1048576行;snapde軟體支援的行數多一些,一次可以開啟編輯一兩千萬行的csv資料,速度很快。

set_time_limit(0);//

取消指令碼執行時間的限制

ini_set('memory_limit', '1024m');//

設定記憶體限制

$columns =[

'列名1', '列名2', '列名3' //

需要幾列,定義好列名];

//$filename = 'test';

header("content-disposition: attachment; filename=\"" . $filename . ".csv\"");

$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++)

//釋放變數的記憶體

unset($db_data);

//【注意:每處理完一頁,重新整理輸出緩衝到瀏覽器】

ob_flush

();  

//必須同時使用 ob_flush() 和flush() 函式來重新整理輸出緩衝。

flush

();}

fclose($fp

);exit();

csv相比於excel檔案有其一定的優勢:

一般xls的格式最大支援六萬行的資料左右,csv格式檔案對資料的行數沒有限制,而且csv檔案占用空間比excel檔案小。

但是excel、wps、openoffice緊支援開啟編輯前面1048576行;snapde軟體支援的行數多一些,一次可以開啟編輯一兩千萬行的csv資料,速度很快。

bcp資料表匯出

select bcp nmdb.name out name txt c r 123 t 321 unb pningbo sbdw nb from sysobjects where type u and name not like tra or name in tratypeinfo tradatae...

php 匯出excel大量資料方法

通過php輸出流方式匯出 php output是乙個可寫的輸出流,允許程式像操作檔案一樣將輸出寫入到輸出流中,php會把輸出流中的內容傳送給web伺服器並返回給發起請求的瀏覽器 儲存為csv檔案 csv是最通用的一種檔案格式,它可以非常容易地被匯入各種pc 及資料庫中,而xls則是excel專用格式...

mysql 匯出表資料表結構

在命令列下mysql的資料匯出有個很好用命令mysqldump,它的引數有一大把,可以這樣檢視 mysqldump 最常用的 mysqldump uroot pmysql databasefoo table1 table2 foo.sql 這樣就可以將資料庫databasefoo的表table1,t...