Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Import-Fortschrittsbalkenklasse

PHP-Import-Fortschrittsbalkenklasse

不言
不言Original
2018-07-05 15:53:212184Durchsuche

Dieser Artikel stellt hauptsächlich die PHP-Import-Fortschrittsbalkenklasse vor, die einen gewissen Referenzwert hat. Jetzt kann ich sie mit allen teilen, die sie brauchen.

Ich führe gerade einen Kundenimport durch . Funktion, eine importierte Fortschrittsbalkenklasse, organisiert:

<?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[&#39;length&#39;];
		$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) . &#39;%&#39;;
		echo "<script>updatePercent(&#39;$successNum&#39;,$this->faileCounter,&#39;$percent&#39;);</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][&#39;line&#39;] = $line;
			$this->faileLines[$this->faileCounter][&#39;errMessage&#39;] = $errMes;

			echo "<script>showErr(&#39;".$this->getFaileLine()."&#39;);</script>";
			print str_pad("",100000);
			ob_flush();
			return true;
		}
	}
	
	public function getFaileCounter(){
		return $this->faileCounter;
	}
	
	/**
	 * 获取出错的点
	 *
	 * @return string $html
	 */
	public function getFaileLine(){
		$html = &#39;&#39;;
		if(!empty($this->faileLines)){
			foreach($this->faileLines as $failline){
				$html .= &#39;错误位置:&#39;.$failline[&#39;line&#39;].&#39;,  错误信息:&#39;.$failline[&#39;errMessage&#39;].&#39;<br/>&#39;;
			}
		}else{
			$html .= &#39;没有错误信息&#39;;
		}
		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(&#39;msg&#39;).innerHTML = &#39;成功处理了 &#39;+have_process+&#39; 条数据&#39;;
						document.getElementById(&#39;errMsg&#39;).innerHTML = &#39;失败 &#39;+errCount+&#39; 条数据&#39;;
						document.getElementById(&#39;progress&#39;).style.width = percent;
						document.getElementById(&#39;percent&#39;).innerHTML = percent;
						if(document.getElementById(&#39;progress&#39;).style.width == &#39;100%&#39;){
							document.getElementById(&#39;percent&#39;).innerHTML = &#39;处理完毕!&#39;;
							stop();
						}
					}
					function showErr(msg){
						document.getElementById(&#39;allErr&#39;).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(&#39;time_h&#39;).innerHTML = hour;
						document.getElementById(&#39;time_m&#39;).innerHTML = minute;
						document.getElementById(&#39;time_s&#39;).innerHTML = second;
						window.timer1 = window.setTimeout(\"start()\",1000);
					}
					setTimeout(\"start()\",0);
					function stop(){
					 clearTimeout(window.timer1);
					}

					function showMem(i,progress){
						document.getElementById(&#39;showM&#39;).innerHTML = &#39;_____&#39;+i+&#39;: &#39;+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-Framework-Aufruf:

$this->load->library(&#39;loading&#39;,array(&#39;length&#39;=>$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); //测试查看内存使用情况的
}

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe es Wird für alle nützlich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website!

Verwandte Empfehlungen:

So greifen Sie auf Webinhalte und Bilder mit PHP zu

So laden Sie ZIP-Bilder mit PHP herunter

Sicherheitsverarbeitung von PHP-Webanfragen

Das obige ist der detaillierte Inhalt vonPHP-Import-Fortschrittsbalkenklasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn