一分鐘解PHP大資料量(大於50萬)匯出到Excel

慕斯
發布: 2023-03-10 21:30:02
轉載
8486 人瀏覽過

PHP中我們了解了那麼多關於PHP的知識,不知道你們對運用PHP的技能掌握多少,我相信很大一部分人會了解但是不會運用知識,那麼不急本篇文章就是帶領大家更深刻的去運用PHP。

分析

#1、工具

首先明確我們需要匯出的數量50W ,其次我們使用過都知道Excel2003版最大行數是65535行,Excel2007版的行數(1048576行)才能達到我們的要求,所以我們需要使用Excel的版本必須為2007版及以上。

2、類別庫

目前最常用的PHP處理Excel的類別庫是PHPExcel(經過實例測試匯出1w條數據,再加上各種數據判斷處理我用了5-8分鐘);我在網上還查到一款叫PHPOffice(這個我沒用過,大家可以嘗試一下,據說效率比PHPExcel要好,等下次再寫篇博文介紹一下);還有一個fputcsv(),匯出的是csv格式文件,也可以用Excel文件開啟。

1、逾時

這個是直接的,請求逾時。在這個多的資料請求處理下,超市非常常見,這時我們需要修改PHP的配置:set_time_limit(0)。

2、溢出

我們一次性的把所有資料從資料庫取出填入記憶體中,一下不光記憶體儲存不夠,如果伺服器CPU配置不高的話使用率一下也能達到100%,會造成伺服器卡負載。關於溢出我們也需要修改PHP的配置:ini_set('memory_limit', '1024M')。

解決方案

1、使用PHPExcel匯出

使用此種方案匯出50w 的資料體驗非常的不好,經測試之後是雖說是可行的,伺服器上也可以匯出,就是時間會慢一些,而且會是一直下載狀態。如果使用php類別庫,建議將php升級到最新的php7版本節省內存,且計算速度要快

2、使用csv導出

如果不是用php類別庫,那麼fputcsv()是最佳方式,這種方式要比PHPExcel好很多;因為csv檔案較小,csv檔案資料可存放數量可大可小,csv產生不佔用大量CPU和時間,而Excel的生成時間隨著文件資料量的增加成而所需時間越多。

3、理想方案

將資料依照某種條件分割,減少匯出的資料量,例如依照日期匯出,可一週匯出一次或一天匯出一次,資料分割肯定是必須的步驟,防止記憶體溢出,運行超時;

進行演算法優化,在資料循環時,減少嵌套循環,生成csv或Excel的資料物件時,一次成型,減少資料庫查詢次數,如果需要用到其他資料請事先產生對應資料結構的資料。

4、最快方案

將需求交給運維,直接執行sql語句進行匯出:

SELECT
	*
FROM
	table_name 
INTO OUTFILE 'F:/test.csv' 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n';
登入後複製

執行此語句可能會出現如下錯誤:

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
登入後複製

這個是由於Mysql的配置權限問題,可以運行SHOW VARIABLES LIKE '%secure%';查看secure-file-priv 目前的值是什麼,NULL就代表禁止導出,所以需要設置一下。在Mysql安裝路徑下的my.ini文件,修改設定一下路徑,沒有的話添加上此配置:

secure_file_priv=F:/
登入後複製

50w 的資料你會發現很快就導出了。你也可以寫此語句,知道此文件在伺服器上的路徑,進行打包下載即可。

相關學習影片分享:php影片教學

#

以上是一分鐘解PHP大資料量(大於50萬)匯出到Excel的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板