PHP比cURL快?

时间:2013-10-15 18:10:57

标签: php performance curl

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

这就是我所拥有的:

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 />';
    }
}

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

至少,这个REST客户端库可以为您提供有关如何使用curl_multi_exec()

的良好示例代码

显然,您需要根据可用硬件和要求处理的服务可以处理的并发请求的数量来处理。