PHP和jQuery解析时的进度条

5

我正在考虑如何为解析HTML数据创建进度条。基本上,用户搜索某些内容,然后我会解析另一个网站。我尝试通过获取数组中找到的对象数量,然后将100除以它并在for循环中获取当前对象并将其乘以100/总数来实现。然后我将使用该值更新文本文件。然后使用该值更新进度条。但是,我希望有更有效的方法来实现它。而且它必须对每个用户都是唯一的。谢谢。

4个回答

7

我发现了另一种方法来解决这个问题,我想分享给所有有同样疑问的人。我在这里找到了它: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>
?>

3

执行长时间的php进程同时显示进度,即使在同一页上有多个进度条前/后钩子http://pastebin.com/KSxjC01r

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

请随意使用它。


链接出现404错误。 - Mohsen Haeri

0

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


好的,解析过程是使用 PHP 构建的,使用了 simple_html_dom 类。 - Username
在PHP中,无法访问已经启动的脚本。在其执行期间,您只能以编程方式在数据库或文件中留下标记。然后,您可以使用另一个PHP脚本读取它们,但这听起来真的不是一个好主意。一般情况下,您可以使用JavaScript API获取有关文件上传的信息,但不能用于脚本执行。 - Krasimir
好的,写入cookie怎么样? - Username
我不确定,但我认为您应该重新加载页面以设置cookie值。在您的情况下,您正在运行php脚本,直到它解析整个html之前,您无法重新加载它。 - Krasimir
可能 Node.js 不是唯一的选择,但你很可能需要自己编写解析器。不过,你可以在其中使用 jQuery,使你的生活更加轻松。在后端使用 jQuery 并解析 HTML,速度会快得多,我猜想你甚至不需要预载器。使用 Node.js 也意味着你的托管提供商应该支持它。 - Krasimir
显示剩余3条评论

-2

我使用了用户user3393366在上面的帖子中提出的解决方案,尽管它输出了大量丑陋的JavaScript代码,但它运行得非常好。我对其进行了修改,以根据完成百分比输出多彩进度条,解决了页面上多个进度条的问题,为进度条添加了标题,并添加了可选的隐藏进度条完成功能...因此,不需要jQuery或ajax,而且效果很好...非常愿意在这里发布我的修改内容...当然,也许不是最前沿的东西...但能够完成工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接