溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP大數(shù)據(jù)量導出到Excel的方法

發(fā)布時間:2021-06-25 10:04:51 來源:億速云 閱讀:174 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“PHP大數(shù)據(jù)量導出到Excel的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“PHP大數(shù)據(jù)量導出到Excel的方法”吧!

分析

1、工具

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

2、類庫

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

1、超時

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

2、溢出

我們一次性的把所有數(shù)據(jù)從數(shù)據(jù)庫取出填充到內(nèi)存中,一下不光內(nèi)存存儲不夠,并且如果服務器CPU配置不高的話使用率一下也能達到100%,會造成服務器卡負載。關(guān)于溢出我們也需要修改PHP的配置:ini_set('memory_limit', '1024M')。

解決方案

1、使用PHPExcel導出

使用此種方案一下導出50w+的數(shù)據(jù)體驗非常的不好,經(jīng)測試之后是雖說是可行的,服務器上也可以導出,就是時間會慢一些,而且會是一直下載狀態(tài)。如果使用php類庫,建議將php升級到最新的php7版本節(jié)省內(nèi)存,且計算速度要快

2、使用csv導出

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

3、理想方案

將數(shù)據(jù)按照某種條件進行分割,減少導出的數(shù)據(jù)量,例如按照日期進行導出,可一周導出一次或者一天導出一次,數(shù)據(jù)分割肯定是必須的步驟,防止內(nèi)存溢出,運行超時;

進行算法優(yōu)化,在數(shù)據(jù)循環(huán)時,減少嵌套循環(huán),生成csv或者Excel的數(shù)據(jù)對象時,一次成型,減少數(shù)據(jù)庫查詢次數(shù),如果需要用到其他數(shù)據(jù)請?zhí)崆吧上鄳獢?shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)。

4、最快方案

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

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

運行此語句可能出現(xiàn)如下錯誤:

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

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

secure_file_priv=F:/

PHP大數(shù)據(jù)量導出到Excel的方法

50w+的數(shù)據(jù)你會發(fā)現(xiàn)很快就導出了。你也可以寫此此語句,知道此文件在服務器上的路徑,進行打包下載即可。

到此,相信大家對“PHP大數(shù)據(jù)量導出到Excel的方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI