1

获取http状态码的最快方法是什么。我有一个大约 10k URL 内的列表要检查。在最好的情况下,它每 15 分钟检查一次。所以我有一个 php 脚本,它使用简单的 curl 函数并循环遍历它们。但这需要太多时间。有什么建议我可以做些什么来改善它?对多个 url 进行并行检查呢?php可以管理多少?我对这整个表演很陌生。

这就是我所拥有的:

public function getHttpStatus(array $list) {
    $list = array(…); // Array contains 10k+ urls from database.
    for($i = 0; $i < count($list); $i++) {
            $ch = $list[$i];
        curl_setopt($ch, CURLOPT_NOBODY, 1); 
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 5);

        $c = curl_exec($ch); 
        $info = curl_getinfo($ch);
        echo $info['http_code'] . '<br />';
    }
}

提前致谢!

4

1 回答 1

3

您可以考虑使用curl_multi_exec()- http://php.net/manual/en/function.curl-multi-exec.php,它允许您并行处理多个 curl 句柄。如果你喜欢,你可以看看使用我写的一个非常轻量级的 REST 客户端,它支持curl_multi_exec(). 链接在这里:

https://github.com/mikecbrant/php-rest-client

现在,我没有设置这个库来处理 HEAD 请求,如果你只是在寻找响应代码,它实际上会比 GET 请求更有效。但这应该相对容易修改以支持这样的用例。

至少这个 REST 客户端库可以为您提供关于如何使用的很好的示例代码curl_multi_exec()

显然,您需要根据可用的硬件和发出请求的服务可以处理的内容来调整应该使用的并发请求的数量。

于 2013-10-15T18:16:56.550 回答