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