gpt4 book ai didi

php - 在 PHP 中处理大型 while 循环的最佳方法

转载 作者:行者123 更新时间:2023-11-29 00:24:31 26 4
gpt4 key购买 nike

我有一个通过 CRON 运行的脚本,它处理我数据库中一个表中的每一行(或用户),然后使用 cURL 根据行中找到的用户名提取 URL,然后添加或更新其他信息到同一行。这在大多数情况下工作正常,但似乎需要大约 20 分钟以上才能遍历整个数据库,而且它似乎越进入 while 循环越慢。目前我有大约 4000 行,将来会有更多。

现在我的代码的简化版本是这样的:

$i=0;
while ($i < $rows) {
$username = mysql_result($query,$i,"username");
curl_setopt($ch, CURLOPT_URL, 'http://www.test.com/'.$username.'.php');
$page = curl_exec($ch);
preg_match_all('htmlcode',$page,$test)
foreach ($test as $test3) {
$test2 = $test[$test3][0];
}
mysql_query("UPDATE user SET info = '$test2' WHERE username = '$username');
++$i;
}

我知道 MySQL 查询不应该在 while 循环中,这是我要从中删除的最后一个查询,但是处理需要反复运行很长时间的 while 循环的最佳方法是什么时间?

我认为最好的选择是让脚本一次运行十行然后停止。例如,因为我在 CRON 中有脚本,所以我想让它每 5 分钟运行一次,它会运行 10 行,停止,然后以某种方式知道在 CRON 作业再次开始时选择接下来的 10 行。但是我不知道如何做到这一点。

如有任何帮助,我们将不胜感激!

最佳答案

关于逐步加载数据:
您可以在表格中添加一列“last_updated”,并在每次加载页面时更新它。然后在再次加载网站之前将该列与当前时间戳进行比较。

例子:

mysql_query("UPDATE user SET info = '$test2', last_updated = ".time()." WHERE username = '$username');

当您加载数据时,将其设置为“WHERE last_updated > (time()-$time_since_last_update)”

关于php - 在 PHP 中处理大型 while 循环的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568460/

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