php下載一個產生所需檔案類型(比較大)遇到的問題。

來源:互聯網
上載者:User
最開始每發現,後來探索資料多了,php指令碼就會執行很長時間。

我是簡單的把所有資料擷取到,然後再去判斷符合尋找條件的,這樣確實很麻煩,但是因為條件有可能為空白,我感覺去對每個條件都判斷一下是否為空白?不為空白,就在sql語句中加上太麻煩,就沒那麼做。(這個有什麼號辦法也可以告訴我)

正常所有條件都為空白,那幾個if語句應該不會浪費多長時間,所以就是擷取資料庫那好2,3萬條資料,並遍曆這2,3萬條資料產生相應格式的字串(有html,txt等格式)費了很長時間,超過了max_execution_time =30。(我設定很長,等了2分鐘多,他也沒輸出來),超過了那個時間,就直接進入那個指令碼,一個白的介面。

所以我的主要問題:

怎麼樣把那資料匯出來,領導的建議是每次讀1000條,加個進度條,而網上查到的大部分都是固定的檔案,有路徑可以直接下的,我這個是產生的,本來是想用ajax(沒怎麼用過,就知道是非同步請求),然後看到有人說ajax不能下載檔案,smarty模板,html和php檔案分開的,找了很長時間也不知道怎麼辦,求助各位大神。。


回複討論(解決方案)

如果是我,也跟你們領導的想法一樣,分頁去產生。。。

過濾掉傳入條件的空項,可用 array_diff
如 $_POST = array_diff($_POST, array(''));
沒有了空項,組裝 sql 就簡單多了

雖然正常都為空白,但你不也是在迴圈中一一判別嗎?一萬條資料不就要判斷數萬次嗎?

如果沒有查詢條件,那又何必每次都去組裝呢?
在 select 指令中加上 INTO OUTFILE 子句不就直接輸出到檔案中去了嗎

過濾掉傳入條件的空項,可用 array_diff
如 $_POST = array_diff($_POST, array(''));
沒有了空項,組裝 sql 就簡單多了

雖然正常都為空白,但你不也是在迴圈中一一判別嗎?一萬條資料不就要判斷數萬次嗎?

如果沒有查詢條件,那又何必每次都去組裝呢?
在 select 指令中加上 INTO OUTFILE 子句不就直接輸出到檔案中去了嗎。if(!=null)才去迴圈判斷。


我是一次性全取出來了,因為還要產生相應格式的檔案,所以迴圈了那個數組,比如html格式 填個table,tr,td什麼的。
條件為空白的話,就不執行判斷是否合格那個了啊。不是

如果是我,也跟你們領導的想法一樣,分頁去產生。。。




怎麼分?他是一次性匯出所有條件相關的內容啊,產生一個臨時檔案,每次取1000條,放裡面,然後最後提供這個臨時檔案的下載,最後再把這個臨時檔案刪了?

好像是我自己的問題,是下載檔案最後的 echo 導致會很卡,跟資料庫關係不大。。

所以百度了下,在echo 字串的前面加入 ob_start(), 在這期間,echo 每條資料,最後flush(),ob_flush(), ob_end_clean()全部輸出來,暫時不會需要太久的時間。。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.