PHP cURL快速检查网站是否存在

时间:2012-09-22 20:42:50

标签: php

  

可能重复:
  cURL Mult Simultaneous Requests (domain check)

我正在检查网站是否存在。 (如果它响应那么好)问题是我的域名数组是20,000,我正在尽可能地加快这个过程。

我做了一些研究并遇到了这个详细说明同时发生cURL请求的页面 - > http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

我还发现此页面似乎是检查域名网页是否已启动的好方法 - > http://www.wrichards.com/blog/2009/05/php-check-if-a-url-exists-with-curl/

有关如何快速检查20,000个域名以查看它们是否已启动的任何想法?

4 个答案:

答案 0 :(得分:2)

$http = curl_init($url);
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
if($http_status == 200) // good here

答案 1 :(得分:1)

结帐RollingCurl

它允许您执行多个curl请求。 这是一个例子:

    require 'curl/RollingCurl.php';
    require 'curl/RollingCurlGroup.php';


    $rc = new RollingCurl('handle_response');
            $rc->window_size = 2;




            foreach($domain_array as $domain => $value)
            {






                 $request = new RollingCurlRequest($value);

                // echo $temp . "\n";


                    $rc->add($request);




            }

            $rc->execute();




    function handle_response($response, $info)
    {

            if($info['http_code'] === 200)
            {
                // site exists handle response data
            }

    }

答案 2 :(得分:1)

我认为,如果您真的想加快流程并节省大量带宽(因为我计划定期检查可用性),那么您应该使用套接字,而不是卷曲。您可以在时间打开几个套接字并安排每个套接字的“异步”处理。然后你需要发送不是“GET $ sitename / HTTP / 1.0 \ r \ n \ r \ n”请求,而是“HEAD $ sitename / HTTP / 1.0 \ r \ n \ r \ n”。它将返回与GET请求将返回但没有响应主体相同的状态代码。您只需要解析第一行响应以获得答案,因此您可以使用良好的响应代码对其进行regex_match。作为一个额外的优化,最终您的代码将了解哪些站点位于相同的IP上,因此您缓存名称映射并按IP排序列表。然后你可以检查这些站点的一个连接套接字上的几个站点(记得添加'Connection:keep-alive'标题)。

答案 3 :(得分:0)

您可以使用多个卷曲请求,但您可能希望一次将它们限制为10个。您必须在单独的数据库中跟踪作业以处理队列:Threads in PHP