解決思路:
網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了瓊山免費建站歡迎大家使用!
任務分兩種,一個是總進度,也就是任務隊列,用一個array保存起來
還有一個就是任務的進度,如,當前任務完成了多少
用一個參數(shù)來指示當前進度,如currentTask,再用兩個參數(shù)來指示當前正在執(zhí)行任務的任務進度,比如導出數(shù)據(jù),用begin和end來表示當前導出的是從begin到end之間的記錄數(shù)
每次任務執(zhí)行完之后再把begin和end同時在加上增量,再讓瀏覽器跳轉(zhuǎn)一下,這樣就可以調(diào)到下一步繼續(xù)執(zhí)行了,每當在執(zhí)行當前任務結(jié)束時,將CurrentTask向后指示,繼續(xù)任務隊列中的任務
以上用到的參數(shù)都是用querystring來保存的,包括任務隊列信息,也可以用臨時文件來保存
?php//防止執(zhí)行超時set_time_limit(0);//清空并關閉輸出緩存ob_end_clean();//需要循環(huán)的數(shù)據(jù)for($i = 0; $i 188; $i++){ $users[] = 'Tom_' . $i;}//計算數(shù)據(jù)的長度$total = count($users);//顯示的進度條長度,單位 px$width = 500;//每條記錄的操作所占的進度條單位長度$pix = $width / $total;//默認開始的進度條百分比$progress = 0;?htmlheadtitle動態(tài)顯示服務器運行程序的進度條/titlemeta http-equiv="Content-Type" content="text/html; charset=utf-8" /stylebody,div input { font-family: Tahoma; font-size: 9pt}/stylescript language="JavaScript" !-- function updateProgress(sMsg, iWidth) { document.getElementById("status").innerHTML = sMsg; document.getElementById("progress").style.width = iWidth + "px"; document.getElementById("percent").innerHTML = parseInt(iWidth / ?php echo $width; ? * 100) + "%"; } -- /script/headbody div style="margin:50px auto; padding: 8px; border: 1px solid gray; background: #EAEAEA; width: ?php echo $width+8; ?px" div style="padding: 0; background-color: white; border: 1px solid navy; width: ?php echo $width; ?px" div id="progress" style="padding: 0; background-color: #FFCC66; border: 0; width: 0px; text-align: center; height: 16px"/div /div div id="status"/div div id="percent" style="position: relative; top: -30px; text-align: center; font-weight: bold; font-size: 8pt"0%/div /div?phpflush(); //將輸出發(fā)送給客戶端瀏覽器foreach($users as $user){ // 在此處使用空循環(huán)模擬較為耗時的操作,實際應用中需將其替換; // 如果你的操作不耗時,我想你就沒必要使用這個腳本了 :) for($i = 0; $i 1000000; $i++) { } ?script language="JavaScript" updateProgress("正在操作用戶 ?php echo $user; ? ....", ?php echo min($width, intval($progress)); ?);/script?php flush(); //將輸出發(fā)送給客戶端瀏覽器,使其可以立即執(zhí)行服務器端輸出的 JavaScript 程序。 $progress += $pix;} //end foreach?script language="JavaScript" //最后將進度條設置成最大值 $width,同時顯示操作完成 updateProgress("操作完成!", ?php echo $width; ?);/script?phpflush();?/body/html
配合前端來做 先做一個寬度100%的灰色矩形 上面覆蓋一個有顏色的矩形 默認寬度0
后端把數(shù)據(jù)渲染到前端 數(shù)據(jù)要在后端處理成百分比 也就是 值/總數(shù)*100 如20/200*100=10 也就是10% 把這個10傳給頁面 把有顏色的矩形寬度設置為10%的寬度就行了
一般來說,很少會有人直接用PHP輸出
進度條
,但是也是可以實現(xiàn)的(需要JS)。
原理和過程:
利用flush函數(shù)會提前輸出緩沖區(qū)內(nèi)容;
內(nèi)容是主要的進度條;
循環(huán)》
輸出改變內(nèi)容的JS;
暫停一秒,繼續(xù)循環(huán);
所有的輸出都要先放到緩沖區(qū)的,直接echo的輸出是等到頁面結(jié)束才輸出。
用戶的函數(shù):
sleep()
ob_start()
ob_flush()
flush()
或
ob_implicit_flush();
具體的代碼就不寫了,要自己動手哦,百度下每個函數(shù)的意思,加深理解和記憶。
網(wǎng)站題目:php插入數(shù)據(jù)進度條 php進度條原理
當前地址:http://jinyejixie.com/article30/dohhpso.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信小程序、手機網(wǎng)站建設、電子商務、營銷型網(wǎng)站建設、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)