我正在检查网站是否存在。 (如果它响应那么好)问题是我的域名数组是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个域名以查看它们是否已启动的任何想法?
答案 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)
它允许您执行多个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