Php 运行循环以查找和验证来自不同网站的超过100万个用户名的最快、最有效的方法?

Php 运行循环以查找和验证来自不同网站的超过100万个用户名的最快、最有效的方法?,php,curl,Php,Curl,使用PHP,当前的脚本确实可以工作,但显然需要很长时间,因为要验证的用户名超过100万个 这将检查外部网站API并返回{userID}如果它是有效的用户名,如果不是,则返回0 $query = $db->query('SELECT id, username FROM users_to_verify'); // Over 1 million. foreach($query as $row) { $userID = $row['id']; $userName =

使用PHP,当前的脚本确实可以工作,但显然需要很长时间,因为要验证的用户名超过100万个

这将检查外部网站API并返回
{userID}
如果它是有效的用户名,如果不是,则返回
0

    $query = $db->query('SELECT id, username FROM users_to_verify'); // Over 1 million.
    foreach($query as $row) {
    $userID = $row['id'];
    $userName = $row['username'];
    if(!preg_match("/<span class=\"user\">0<\/span>/", file_get_contents("http://website.net/api.php?userName=".$userName)))
            $db->query('UPDATE users_to_verify SET verified = 1 WHERE id = $userID');
        }
    }
$query=$db->query('SELECT id,username FROM users_to_verify');//超过一百万。
foreach($queryas$row){
$userID=$row['id'];
$userName=$row['userName'];
如果(!preg_匹配(“/0/”),则文件获取内容(“http://website.net/api.php?userName=“$userName”))
$db->query('updateusers_to_verify SET verified=1,其中id=$userID');
}
}

这是最快的方法吗?我也涉猎过cURL,但file_get_contents和cURL似乎都有相同的性能,我也知道其中一些性能取决于外部网站的响应时间,但是我想确保我的团队使用尽可能快的最好的方法。

我不知道
文件获取内容和
cUrl
性能。但您可以通过在一个命令中运行所有查询来提高速度:

$query = $db->query('SELECT id, username FROM users_to_verify'); // Over 1 million.
$update_query = [];
foreach($query as $row) {
$userID = $row['id'];
$userName = $row['username'];
if(!preg_match("/<span class=\"user\">0<\/span>/", file_get_contents("http://website.net/api.php?userName=".$userName)))
        $update_query[] = 'UPDATE users_to_verify SET verified = 1 WHERE id = $userID';
    }
}
$db->query(implode(';',$update_query));

我不知道
file\u-get\u-contents
cUrl
性能。但您可以通过在一个命令中运行所有查询来提高速度:

$query = $db->query('SELECT id, username FROM users_to_verify'); // Over 1 million.
$update_query = [];
foreach($query as $row) {
$userID = $row['id'];
$userName = $row['username'];
if(!preg_match("/<span class=\"user\">0<\/span>/", file_get_contents("http://website.net/api.php?userName=".$userName)))
        $update_query[] = 'UPDATE users_to_verify SET verified = 1 WHERE id = $userID';
    }
}
$db->query(implode(';',$update_query));

您可以在站点打开时不使用循环来实现这一点,尝试在后台进行,让PHP在后台像Cron作业一样进行工作

看看这个:

在站点打开时不使用循环就可以实现这一点,可以尝试在后台执行,让PHP像Cron一样在后台执行工作

看看这个:

瓶颈将是远程站点的响应时间。旋度或备选方案之间的差异可以忽略不计。确保远程站点没有速率限制,它们可能会限制甚至阻止您。查看multi\u curl,可能会为您节省一些时间1000000次
preg\u match()
迭代肯定会让您速度变慢。您应该执行
if(文件获取内容)http://website.net/api.php?userName=“$userName)!='0')
相反,你有权无数次锁定该网站吗?如果他们因为虐待而阻止你,不要哭。是的,我有权利。瓶颈将是远程站点的响应时间。旋度或备选方案之间的差异可以忽略不计。确保远程站点没有速率限制,它们可能会限制甚至阻止您。查看multi\u curl,可能会为您节省一些时间1000000次
preg\u match()
迭代肯定会让您速度变慢。您应该执行
if(文件获取内容)http://website.net/api.php?userName=“$userName)!='0')
相反,你有权无数次锁定该网站吗?如果他们因为虐待而阻止你,不要哭。是的,我有权利。那根本没用。瓶颈是file_get_contents()-等待远程网站的速度通常比本地数据库调用慢得多。而且并非所有的数据库都允许您在一个query()调用中运行多个查询,因此在大多数情况下(尤其是mysql),这是行不通的。当然,数据库不是瓶颈,但如果在其他地方还有改进的余地,就应该指出。那基本上没什么用。瓶颈是file_get_contents()-等待远程网站的速度通常比本地数据库调用慢得多。而且并非所有的数据库都允许您在一个query()调用中运行多个查询,因此在大多数情况下(尤其是mysql),这是行不通的。当然,数据库不是瓶颈,但如果在其他地方还有改进的余地,就应该指出。依我所见