欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          一分鐘解決PHP大數(shù)據(jù)量(大于50萬)導出到Excel

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

          分析

          1、工具

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

          2、類庫

          目前最常用的PHP處理Excel的類庫是PHPExcel(經實例測試導出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ù)庫取出填充到內存中,一下不光內存存儲不夠,并且如果服務器CPU配置不高的話使用率一下也能達到100%,會造成服務器卡負載。關于溢出我們也需要修改PHP的配置:ini_set('memory_limit', '1024M')。

          解決方案

          1、使用PHPExcel導出

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

          2、使用csv導出

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

          3、理想方案

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

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

          4、最快方案

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

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

          運行此語句可能出現(xià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:/

          一分鐘解決PHP大數(shù)據(jù)量(大于50萬)導出到Excel

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

          相關學習視頻分享:php視頻教程

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號