84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
php 匯入excel 前台顯示進度條,求指教(不是上傳excel檔案的進度,而是php 讀取excel->處理資料->寫到mysql 這個過程的進度條)
走同样的路,发现不同的人生
這個要看你Excel的大小和伺服器允許的一次請求的最長時間。我覺得可以分成以下幾種情況:
Excel很小,一兩秒鐘就導入完成了 -- 這種情況下直接顯示個假的進度條就差不多了。比如說:第一秒動畫進度到50%,第二秒進度到75%,第三名動畫進度到90%,然後等伺服器回OK進度到100%.
Excel比較大,但是能在伺服器允許的一次請求的最長時間內完成 -- 這種情況下,也可以有好幾種做法:
簡單粗暴點,導入Excel的進度自行估算下存放到某個位置(例如資料庫某個欄位中),另起一個ajax請求或EventSource每隔一段時間(例如500ms)來輪詢下進度,並顯示動畫。
利用HTTP的長連接,在導入Excel的請求中輸出進度,記得要及時刷新到瀏覽器中。而瀏覽器中則根據傳回的資料顯示進度動畫。
Excel非常大或業務比較複雜,無法在伺服器允許的一次請求的最長時間內完成-- 這時候,如果服務端能跑CLI腳本,則建議跑CLI腳本來導入(進度顯示可以參考2.1) ;否則的話就得對Excel進行分步驟/分時/分段,然後在瀏覽器中一步一步執行導入任務,並根據劃分的結果來顯示進度。
讀取excel後能取得記錄總條數麼? 能,那就那麼整唄,已處理記錄數/總數。 不能,那就放棄100%完成進度條,弄個反覆循環的進度條表示我還活著就行了。
不知道你會不會用swoole,也就說你上傳完excel,之後,取得完記錄條數,然後直接用swoole來執行導入sql的動作。你目前的頁面只要通過統計資料庫的記錄條數,就能得到進度百分比了。
這個要看你Excel的大小和伺服器允許的一次請求的最長時間。我覺得可以分成以下幾種情況:
Excel很小,一兩秒鐘就導入完成了 -- 這種情況下直接顯示個假的進度條就差不多了。比如說:第一秒動畫進度到50%,第二秒進度到75%,第三名動畫進度到90%,然後等伺服器回OK進度到100%.
Excel比較大,但是能在伺服器允許的一次請求的最長時間內完成 -- 這種情況下,也可以有好幾種做法:
簡單粗暴點,導入Excel的進度自行估算下存放到某個位置(例如資料庫某個欄位中),另起一個ajax請求或EventSource每隔一段時間(例如500ms)來輪詢下進度,並顯示動畫。
利用HTTP的長連接,在導入Excel的請求中輸出進度,記得要及時刷新到瀏覽器中。而瀏覽器中則根據傳回的資料顯示進度動畫。
Excel非常大或業務比較複雜,無法在伺服器允許的一次請求的最長時間內完成-- 這時候,如果服務端能跑CLI腳本,則建議跑CLI腳本來導入(進度顯示可以參考2.1) ;否則的話就得對Excel進行分步驟/分時/分段,然後在瀏覽器中一步一步執行導入任務,並根據劃分的結果來顯示進度。
讀取excel後能取得記錄總條數麼?
能,那就那麼整唄,已處理記錄數/總數。
不能,那就放棄100%完成進度條,弄個反覆循環的進度條表示我還活著就行了。
不知道你會不會用swoole,也就說你上傳完excel,之後,取得完記錄條數,然後直接用swoole來執行導入sql的動作。你目前的頁面只要通過統計資料庫的記錄條數,就能得到進度百分比了。