久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

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

      PHP中我們了解了那么多關(guān)于PHP的知識(shí),不知道你們對(duì)運(yùn)用PHP的技能掌握多少,我相信很大一部分人會(huì)了解但是不會(huì)運(yùn)用知識(shí),那么不急本篇文章就是帶領(lǐng)大家更深刻的去運(yùn)用PHP。

      分析

      1、工具

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

      2、類庫(kù)

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

      1、超時(shí)

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

      2、溢出

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

      解決方案

      1、使用PHPExcel導(dǎo)出

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

      2、使用csv導(dǎo)出

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

      3、理想方案

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

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

      4、最快方案

      將需求交給運(yùn)維,直接運(yùn)行sql語句進(jìn)行導(dǎo)出:

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

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

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

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

      secure_file_priv=F:/

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

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

      相關(guān)學(xué)習(xí)視頻分享:php視頻教程

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