>  기사  >  백엔드 개발  >  PHP 가져오기 진행률 표시줄 클래스

PHP 가져오기 진행률 표시줄 클래스

不言
不言원래의
2018-07-05 15:53:212209검색

이 기사에서는 특정 참조 값이 있는 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[&#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 프레임워크 호출:

$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); //测试查看内存使用情况的
}

이상은 이 글의 전체 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

PHP로 웹 콘텐츠와 이미지를 가져오는 방법

PHP로 zip 이미지 다운로드를 패키징하는 방법

php 웹 요청 보안 처리

위 내용은 PHP 가져오기 진행률 표시줄 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.