<?php
class
Loading {
private
$width
= 500;
private
$total
= 0;
private
$start_time
;
private
$faileLines
=
array
();
private
$faileCounter
= 0;
public
function
__construct(
$param
){
ob_start();
$this
->total =
$param
['length'];
$this
->start_time = time();
ob_end_clean();
}
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;
}
public
function
run_mem(
$i
,
$progress_mem
){
echo
"<script>showMem($i,$progress_mem);</script>"
;
print
str_pad
(
""
,100000);
ob_flush();
return
true;
}
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;
}
public
function
getFaileLine(){
$html
= '';
if
(!
empty
(
$this
->faileLines)){
foreach
(
$this
->faileLines
as
$failline
){
$html
.= '错误位置:'.
$failline
['line'].', 错误信息:'.
$failline
['errMessage'].'<br/>';
}
}
else
{
$html
.= '没有错误信息';
}
return
$html
;
}
public
function
createHtml(){
echo
"<!DOCTYPE html PUBLIC \"-
<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;
}
}