国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于數(shù)據(jù)導(dǎo)出超時(shí)的問題

zsy888 / 1202人閱讀

摘要:實(shí)際工作中,我們經(jīng)常導(dǎo)出報(bào)表的需求,當(dāng)導(dǎo)出數(shù)據(jù)量過大的時(shí)候,經(jīng)常會(huì)遇到超時(shí)和內(nèi)存溢出的問題。解決方案一超時(shí)可用解決。獲取數(shù)據(jù),根據(jù)自己的業(yè)務(wù)邏輯,去數(shù)據(jù)庫獲取數(shù)據(jù)。

實(shí)際工作中,我們經(jīng)常導(dǎo)出報(bào)表的需求,當(dāng)導(dǎo)出數(shù)據(jù)量過大的時(shí)候,經(jīng)常會(huì)遇到超時(shí)和內(nèi)存溢出的問題。

解決方案一

超時(shí)可用: set_time_limit(0) 解決。

內(nèi)存溢出可用: ini_set("memory_limit", "自定義內(nèi)存")。

解決方案二

優(yōu)化程序,利用數(shù)據(jù)庫或文件來緩存中間結(jié)果。

解決方案三

利用Ajax分多次請(qǐng)求,寫入文件,下載文件,效果如上圖。

(方案三)為大家提供一個(gè)Demo

設(shè)計(jì)思路

我們將其拆成100次請(qǐng)求,請(qǐng)求成功,進(jìn)度條前進(jìn)1%。

每次請(qǐng)求都需要寫入文件,然后對(duì)文件進(jìn)行追加寫入。

當(dāng)文件寫入完畢后,顯示下載按鈕 ,點(diǎn)擊下載即可。

功能點(diǎn)

兩種進(jìn)度條樣式。

Jquery Ajax。

數(shù)據(jù)寫入CSV。

下載文件。

頁面樣式:Bootstrap。

代碼如下

 $value) {
                $header_data[$key] = iconv("utf-8", "gbk", $value);
            }
            fputcsv($fp, $header_data);
        }
        $num = 0;
        //每隔$limit行,刷新一下輸出buffer,不要太大,也不要太小
        $limit = 100000;
        //逐行取出數(shù)據(jù),不浪費(fèi)內(nèi)存
        $count = count($data);
        if ($count > 0) {
            for ($i = 0; $i < $count; $i++) {
                $num++;
                //刷新一下輸出buffer,防止由于數(shù)據(jù)過多造成問題
                if ($limit == $num) {
                    ob_flush();
                    flush();
                    $num = 0;
                }
                $row = $data[$i];
                foreach ($row as $key => $value) {
                    $row[$key] = iconv("utf-8", "gbk", $value);
                }
                fputcsv($fp, $row);
            }
        }
        fclose($fp);
    }

    /**
     * 下載文件
     * @param string $file_url 文件地址
     * @return string
     */
    function _download_file ($file_url = "")
    {
        if (!isset($file_url) || trim($file_url)=="") {
            die("File URL is empty.");
        }
        if (!file_exists($file_url)) {
            die("File does not exist.");
        }
        $file_name = "down_".date("YmdHis", time());
        $file_type = fopen($file_url,"r"); //打開文件
        //輸入文件標(biāo)簽
        header("Content-type: application/octet-stream");
        header("Accept-Ranges: bytes");
        header("Accept-Length: ".filesize($file_url));
        header("Content-Disposition: attachment; filename=".$file_name);
        //輸出文件內(nèi)容
        echo fread($file_type, filesize($file_url));
        fclose($file_type);
    }

    //以后是邏輯代碼,大家可以根據(jù)自己的需求進(jìn)行編寫。
        $path = "文件的絕對(duì)地址"; //path 是存放文件的絕對(duì)地址。
    if (isset($_POST["start"])) {
          //每一個(gè)多帶帶的請(qǐng)求,要保證文件名是唯一的,因?yàn)楹竺嬉^續(xù)進(jìn)行追加。
              $file_name = "demo.csv";
        //獲取數(shù)據(jù),根據(jù)自己的業(yè)務(wù)邏輯,去數(shù)據(jù)庫獲取數(shù)據(jù)。
        $data        = [];
        $header_data = ["執(zhí)行時(shí)間", "隨機(jī)數(shù)"]; //首行數(shù)據(jù),表頭
        //模擬數(shù)據(jù)如下:
        for ($i=0; $i<=100; $i++) {
            $data[$i]["time"] = date("Y-m-d H:i:s", time());
            $data[$i]["num"]  = mt_rand(1000,9999);
        }
        $type = ($_POST["start"] != "0") ? 1 : 0 ;
        //開始將數(shù)據(jù)寫入到文件中
        _export_csv($data, $header_data, $path.$file_name, $type);
        //假設(shè)第100次 寫入完畢,那么就可以進(jìn)行下載文件啦。
        //可以先獲取需要導(dǎo)出的總量,然后根據(jù)實(shí)際情況進(jìn)行拆分?jǐn)?shù)據(jù),每次獲取成功,進(jìn)度條會(huì)顯示進(jìn)度。
        if ($_POST["start"] == 100) {
            die(json_encode(["code" => "ok", "file_path" => "/index.php?op=down&f=".$file_name]));
        } else {
            die(json_encode(["code" => "no"]));
        }
    }

    //簡(jiǎn)單的導(dǎo)出邏輯,可根據(jù)實(shí)際情況,進(jìn)行開發(fā)。
    if (($_GET["op"] == "down") && !empty($_GET["f"])) {
            _download_file($path.$_GET["f"]);
            exit;
    }
?>


    
      
        
        
        
        
        
        
        
        
        
        Demo
    
    
        
    
    

溫馨提示:
Demo 僅供參考,具體開發(fā),請(qǐng)根據(jù)需求,嚴(yán)謹(jǐn)處理。


Thanks ~

AD:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21904.html

相關(guān)文章

  • 基于haddopHDFS和Excel開源庫POI導(dǎo)出數(shù)據(jù)報(bào)表(一)

    摘要:說明這里用到的項(xiàng)目都是基于的項(xiàng)目。但同時(shí),它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。放寬了一部分約束,來實(shí)現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。是項(xiàng)目的一部分。 關(guān)鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報(bào)表 需求背景 在業(yè)務(wù)需求方面,每個(gè)企業(yè)或多或少都會(huì)有報(bào)表導(dǎo)出的作業(yè),量少則可是使用輸出流或者字符串的...

    Nekron 評(píng)論0 收藏0
  • 基于haddopHDFS和Excel開源庫POI導(dǎo)出數(shù)據(jù)報(bào)表(一)

    摘要:說明這里用到的項(xiàng)目都是基于的項(xiàng)目。但同時(shí),它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。放寬了一部分約束,來實(shí)現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。是項(xiàng)目的一部分。 關(guān)鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報(bào)表 需求背景 在業(yè)務(wù)需求方面,每個(gè)企業(yè)或多或少都會(huì)有報(bào)表導(dǎo)出的作業(yè),量少則可是使用輸出流或者字符串的...

    luffyZh 評(píng)論0 收藏0
  • 記一次MongoDB高負(fù)載性能優(yōu)化

    摘要:年月日本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化此處涉及的技術(shù)包括引擎隨著游戲?qū)肴藬?shù)逐漸增加單個(gè)集合的文檔數(shù)已經(jīng)超過經(jīng)常有玩家反饋說卡特別是在服務(wù)器遷移后從核降到核卡頓更嚴(yán)重了遂開始排查問題確認(rèn)服務(wù)器壓力首先使用命令查看總體情況此時(shí)占用不高 Last-Modified: 2019年6月13日11:08:19 本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化, 此處涉及的技術(shù)包括: MongoDB...

    huhud 評(píng)論0 收藏0
  • 記一次MongoDB高負(fù)載性能優(yōu)化

    摘要:年月日本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化此處涉及的技術(shù)包括引擎隨著游戲?qū)肴藬?shù)逐漸增加單個(gè)集合的文檔數(shù)已經(jīng)超過經(jīng)常有玩家反饋說卡特別是在服務(wù)器遷移后從核降到核卡頓更嚴(yán)重了遂開始排查問題確認(rèn)服務(wù)器壓力首先使用命令查看總體情況此時(shí)占用不高 Last-Modified: 2019年6月13日11:08:19 本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化, 此處涉及的技術(shù)包括: MongoDB...

    vibiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<