這篇文章主要介紹了關於PHP匯入進度條類,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
最近在做一個客戶匯入的功能,整理的一個匯入的進度條類:
<?php/** * @File name: Loading.php * @Author: jiumi.jin * @Create time: 10/11/2012 * @Main function: loading */class Loading {private $width = 500;private $total = 0;private $start_time;private $faileLines = array();private $faileCounter = 0;/** * 構造 * @param 進度條長度 $width * @param 要處理的資料長度 $length */public function __construct($param){ob_start();//$this->width = $width;$this->total = $param['length'];$this->start_time = time();ob_end_clean();}/** * 執行進度跟蹤 * @param $num 執行的資料點,這個數字應該是0 到 資料的總長度 * @return bool */public function run($num){$successNum = $num - $this->faileCounter;$percent = number_format($num / $this->total * 100,2) . '%';echo "<script>updatePercent('$successNum',$this->faileCounter,'$percent');</script>";print str_pad("",100000);ob_flush();return true;}/** * 佔用記憶體跟蹤 * @param $i 進度 * @param $progress_mem 佔用記憶體 * @return bool */public function run_mem($i,$progress_mem){echo "<script>showMem($i,$progress_mem);</script>";print str_pad("",100000);ob_flush();return true;}/** * 設定出錯的點 * 例如匯入excel的時候,有不符合模板規範的行數可以在這裡設定 * @param $line 錯誤行數 * @param $errMes 錯誤資訊 */public function setFaileLine($line,$errMes){$line = intval($line);if ($line != 0) {$this->faileCounter++;$this->faile = true;$this->faileLines[$this->faileCounter]['line'] = $line;$this->faileLines[$this->faileCounter]['errMessage'] = $errMes;echo "<script>showErr('".$this->getFaileLine()."');</script>";print str_pad("",100000);ob_flush();return true;}}public function getFaileCounter(){return $this->faileCounter;}/** * 擷取出錯的點 * * @return string $html */public function getFaileLine(){$html = '';if(!empty($this->faileLines)){foreach($this->faileLines as $failline){$html .= '錯誤位置:'.$failline['line'].', 錯誤資訊:'.$failline['errMessage'].'<br/>';}}else{$html .= '沒有錯誤資訊';}return $html;}/** * echo出進度條的html頁面和js函數 * 應該在執行個體化類後立刻執行此方法,否則會失敗 * * @return unknown */public function createHtml(){echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/transitional.dtd\"><html><head> <script>function updatePercent(have_process,errCount,percent){document.getElementById('msg').innerHTML = '成功處理了 '+have_process+' 條資料';document.getElementById('errMsg').innerHTML = '失敗 '+errCount+' 條資料';document.getElementById('progress').style.width = percent;document.getElementById('percent').innerHTML = percent;if(document.getElementById('progress').style.width == '100%'){document.getElementById('percent').innerHTML = '處理完畢!';stop();}}function showErr(msg){document.getElementById('allErr').innerHTML = msg;}//計時var CallTimeLen = \"0\";var timer1 = null;function start(){var hour=\"0\";var minute=\"0\";var second=\"0\";CallTimeLen = parseInt(CallTimeLen)+1;hour = parseInt(CallTimeLen/3600);minute = parseInt(CallTimeLen/60);second = CallTimeLen%60;document.getElementById('time_h').innerHTML = hour;document.getElementById('time_m').innerHTML = minute;document.getElementById('time_s').innerHTML = second;window.timer1 = window.setTimeout(\"start()\",1000);}setTimeout(\"start()\",0);function stop(){ clearTimeout(window.timer1);}function showMem(i,progress){document.getElementById('showM').innerHTML = '_____'+i+': '+progress;}</script></head><body><p style=\"margin:0 auto; margin-top:4px; margin-bottom:0; padding: 8px; padding-bottom:0; border: 1px solid gray; background: #EAEAEA; width:".$this->width."px\"> <p><font color=\"gray\"><span style=\"font-size:12px;\">此操作需要等待一段時間,在執行完畢之前,請不要關閉此頁面</span></font></p> <p style=\"padding: 0; background-color: white; border: 1px solid navy; width:".$this->width."px\"> <p id=\"progress\" style=\"padding: 0; background-color: #FFCC66; border: 0; width: 0px; text-align: center; height: 16px\"></p> </p> <p id=\"msg\" style=\"font-size:12px;\"></p> <p id=\"errMsg\" style=\"font-size:12px;\"></p> 已用時:<span id=\"time_h\"> </span>時 <span id=\"time_m\"> </span>分 <span id=\"time_s\"> </span>秒 <p id=\"showM\" style=\"font-size:12px;\"></p> <p id=\"percent\" style=\"position: relative; top: -32px; text-align: center; font-weight: bold; font-size: 8pt;\">0%</p></p><p id=\"allErr\"></p><body></html>";return true;}}
CI架構的調用:
$this->load->library('loading',array('length'=>$totle)); //載入進度條類,這是CI架構$this->loading->createHtml();//$start_mem = memory_get_usage();foreach($customers as $key=>$customer){ $return = $this->insert_import($customer); if($return != 1){ $this->loading->setFaileLine($key+1,$return); //記錄錯誤 }else{ $this->loading->run($key+1); //成功進度條 } //$progress_mem = memory_get_usage(); //$this->loading->run_mem($key,$progress_mem-$start_mem); //測試查看記憶體使用量情況的}
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!