Php 为什么在for循环完全处理后出现进度条
以下是我的脚本,我在其中放置了进度条,以告知用户正在处理的图纸数据的进度问题是,在将xls保存到csv的整个过程完成后,进度条会出现。请告诉我如何修改以下内容,以便在当前图纸被保存时,进度条会正确显示在程序上。谢谢Php 为什么在for循环完全处理后出现进度条,php,javascript,Php,Javascript,以下是我的脚本,我在其中放置了进度条,以告知用户正在处理的图纸数据的进度问题是,在将xls保存到csv的整个过程完成后,进度条会出现。请告诉我如何修改以下内容,以便在当前图纸被保存时,进度条会正确显示在程序上。谢谢 $excel = new Spreadsheet_Excel_Reader(); $excel->setOutputEncoding('UTF-16'); $excel->read('Student2.xls'); $x=1; $sep
$excel = new Spreadsheet_Excel_Reader();
$excel->setOutputEncoding('UTF-16');
$excel->read('Student2.xls');
$x=1;
$sep = ",";
$nbSheets = count($excel->sheets);
echo $x." - ".$nbSheets;
$total = $nbSheets - 1;
for($i = 0; $i < $nbSheets; $i++) {
// Calculate the percentation
$percent = intval($i/$total * 100)."%";
// Javascript for updating the progress bar and information
echo '<script language="javascript">
document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#ddd;\"> </div>";
document.getElementById("information").innerHTML="'.$i.' row(s) processed.";
</script>';
// This is for the buffer achieve the minimum size in order to flush data
echo str_repeat(' ',1024*64);
// Send output to browser immediately
flush();
//sleep(1);
ob_start();
while($x<=$excel->sheets[$i]['numRows']) {
$y=1;
$row="";
while($y<=$excel->sheets[$i]['numCols']) {
$cell = isset($excel->sheets[$i]['cells'][$x][$y]) ? $excel->sheets[$i]['cells'][$x][$y] : '';
$row.=($row=="")?"\"".$cell."\"":"".$sep."\"".$cell."\"";
$y++;
}
echo $row."\n";
$x++;
}
$x = 1; $y = 1;
$fp = fopen("data.csv",'a');
fwrite($fp,ob_get_contents());
fclose($fp);
ob_end_clean();
}
echo "CSV file created successfully";
// Tell user that the process is completed
echo '<script language="javascript">document.getElementById("information").innerHTML="Process completed"</script>';
也许这可以解决你的问题:
另外,为什么要使用输出缓冲区写入data.csv文件?正如上面所说,输出缓冲区用于输出数据,因此在这种情况下,我认为在fwrite函数中传递$row.\n更符合逻辑。如果我在这里遗漏了什么,请纠正我。您需要使用AJAX或客户机-服务器通信框架来实现这一点 您可以尝试通过文章底部附近的链接下载代码 并且似乎解决了一个类似的问题
尽管我很不愿意这么说,但搜索ajax php progressbar可能会带来大量示例。我查看了您的代码和您提到的链接。您的代码中有一个区别,区别在于您已经对sleep1;,由于只有这个命令,您无法正确地看到工作进度条
因此,请取消这一沉睡1的注释;您的代码将正常工作。为此,您必须使用AJAX。@YogeshSuthar请看一看这个正在工作的示例。请不要使用language=javascript。这是无效的。我提到的上面的链接包含与上面相同的for循环,唯一的区别是上面的代码包含转储数据的脚本,而我提到的链接没有。不!!在我的情况下没有更多的工作,我不能在fwrite中使用,因为我没有得到单行。哦,是我的错误,您需要创建另一个名为$rows的变量,其中您有$rows。=$row。\n;而不是echo$行。\n;我想,在没有输出缓冲区的情况下,它应该可以工作。好吧,我又遇到了一个麻烦,一个更复杂的问题。不管我在for循环的代码之前提到了什么,它都是先运行的。严重原因:-?我使用了并且alerthi偶数hi在for循环执行后出现为什么..我使用并且alerthi偶数hi在for循环执行后出现为什么。。