4

我想知道如何制作一个用于解析 HTML 数据的进度条。本质上,用户搜索了一些东西,然后我解析了另一个网站。我尝试通过获取在数组中找到的对象数量然后将 100 除以它,然后在 for 循环中获取当前对象并将其乘以 100/total 来做到这一点。然后我会用这个值更新一个文本文件。然后使用该值更新进度条。但是,我想要一种更有效的方法来做到这一点。此外,它必须对每个用户都是唯一的。谢谢。

4

4 回答 4

6

我找到了另一种方法,这是为了帮助所有有同样问题的人。我在这里找到了它http://w3shaman.com/article/php-progress-bar-script

<?php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Progress Bar</title>
</head>
<body>
<!-- Progress bar holder -->
<div id="progress" style="width:500px;border:1px solid #ccc;"></div>
<!-- Progress information -->
<div id="information" style="width"></div>
<?php
// Total processes
$total = 10;
// Loop through process
for($i=1; $i<=$total; $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;\">&nbsp;</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 one second so we can see the delay
    sleep(1);
}
// Tell user that the process is completed
echo '<script language="javascript">document.getElementById("information").innerHTML="Process completed"</script>';
?>
</body>
</html>
?>
于 2013-09-02T20:57:21.260 回答
3

在显示进度的同时执行长度 php 进程,甚至在同一页面上有多个进度条和前/后挂钩: http: //pastebin.com/KSxjC01r

我为自己做了,因为我需要它。

随意使用它。

于 2014-03-11T11:49:59.397 回答
0

如果您将 PHP 用于解析部分,那么这意味着您应该以某种方式从该过程中获取信息。这也意味着您必须(可能)向另一个监视第一个脚本或至少从中获取一些日志信息的 php 脚本发出 ajax 请求。我不认为 PHP 是正确的选择。我会建议使用nodejs。在那里,您可以实现实时套接字通信,这很容易。

于 2013-09-02T05:54:51.793 回答
-2

我使用了上面帖子中提出的解决方案 user3393366,虽然它输出的 JavaScript 代码量很丑,但效果很好。我修改它以根据完成百分比显示多色进度条,修复页面问题上的多进度条,为进度条添加标题,并在完成功能时选择隐藏进度条.. 所以,不需要 jquery 或 ajax,并且运作良好.. 非常愿意在这里发布我的模组.. 当然,也许不是最前沿的东西.. 但可以完成工作。

于 2015-05-20T22:38:14.467 回答