gpt4 book ai didi

php - 运行while循环时的进度条

转载 作者:行者123 更新时间:2023-12-04 18:10:33 26 4
gpt4 key购买 nike

我有这个 while 循环,它基本上遍历数据库中的大量记录,并将数据插入另一个:

$q = $con1->query($users1) or die(print_r($con2->errorInfo(),1));
while($row = $q->fetch(PDO::FETCH_ASSOC)){
$q = $con2->prepare($users2);
$q->execute(array($row['id'], $row['username'])) or die(print_r($con2-errorInfo(),1));
}

(为了便于阅读,脚本已被缩短 - 正确的有更长的数组)

我想做这个更图形化的,并显示一个进度条,它已经走了多远,而不是只看到页面加载几分钟(这个页面有大约 20.000 行 - 我有包含更多数据的表格)

我知道您可以从旧数据库中获取总数,而且我还可以轻松地将当前数字放入这样的变量中:
$q = $con1->query($users1) or die(print_r($con2->errorInfo(),1));
$i = 0;
while($row = $q->fetch(PDO::FETCH_ASSOC)){
$q = $con2->prepare($users2);
$q->execute(array($row['id'], $row['username'])) or die(print_r($con2-errorInfo(),1));
$i++;
}

但现在我需要实际获取 $i并显示它 - 或类似的东西。

这是如何“轻松”完成的?

进度条的代码可以在与 while 循环相同的文档中,也可以在另一个更简单的文档中。

最佳答案

您可以创建一个“主”文件,该文件对第一个文件执行 ajax 以运行单个查询。您可以获取此主文件中的所有条目 ID,然后将其作为参数传递给执行单个查询的第二个文件。将这些 id 存储在一个 javascript 数组中。

创建一个执行此操作的函数,当第一个 ajax 完成后,移动到 id 数组的第二个元素,并使用第二个参数执行另一个 ajax。顺便说一下,这就是 magento 导入的方式:)

如果您需要进一步的解释,请告诉我,我已尽力解释,但可能不是很清楚。

// you generate this javascript array using php.
// let's say you have all the ids that have to be processed in $Ids php array.
Ids = [<?php echo implode(',', $Ids); ?>];

function doAjax(i) {
$.ajax({ // using jquery for simplicity
'url': "ajax.php?id=" + Ids[i],
}).done(function(){
if ( i >= 0 ) {
// at the point you know you're at ((Ids.length-i)/(Ids.length) * 100) percent of the script
// so you can do something like this:
// $('.progressbar').css('width', ((Ids.length-i)/(Ids.length) * 100) + '%');
doAjax(i-1);
}
});
}

doAjax(Ids.length); // starting from the last entry

所以,只是为了解释这是什么。它首先声明一个全局 javascript 数组,其中包含需要更改的所有 id。

然后我声明了一个递归ajax函数,这样我们就可以确保在任何时候只有一个ajax运行(这样服务器就不会炸毁),我们可以有一个相当准确的进度。这个 ajax 函数执行以下操作:
  • 向 ajax.php?id=xxx 发送请求 - 其中 xxx 是 javascript 数组中的 id 之一。
  • 在文件中,我们得到 id ( $_GET['id'] ),你从旧数据库中取出它,并将其插入到新数据库中。这仅适用于一个条目。
  • 当 ajax 完成后,它转到 done()功能。自从我们开始doAjax()使用最后一个元素的函数,我们进行下一次迭代 doAjax(i-1) .由于我们在数组中倒退,我们检查键是否为正。如果不是,脚本将停止。

  • 就是这样。

    关于php - 运行while循环时的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353914/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com