2017-10-11 32 views
0

我这里有这个卷曲设置卷曲越来越HEAD时间太长多个URL

function curl($url) { 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_exec($ch); 
$ct = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 
return $ct; 
} 

我用它来得到Content-Type这个值返回给用户。只是为了让那些想要检查所有网址是否为有效链接或有效图像链接与否的人感到轻松。

所以我的代码是

if(isset($_POST['urls'])) { 
    foreach ($urls as $url) { 
     echo "Content Type is ".curl($url)."<br>"; 
    } 
} 

我的问题是,如果用户输入100 URL ~ 500 URL需要10s ~ 15s完成功能。

我该如何优化功能,并且因为我的网络连接速度而慢?

它会被用于DDoS攻击,最好删除它?

+0

并行化:http://php.net/manual/en/function.curl-multi-init.php – ceejayoz

+0

(是的,这可以令人信服地用于DDoS的考虑速率限制你的用户,如果你正在做。这提供给一般不可信任的公众)。 – ceejayoz

+0

@ceejayoz如果用户可以多次放置'500 URL',并重复和重复,那很不好? (限制:500) – AXAI

回答

1

对于像这样的操作,15ms的速度非常快!可以使用curl_multi函数对其进行优化,因为这些函数允许并行加载URL。 但是,我不是很确定你为什么会在意它是15ms。通常认为单个HTTP请求不止于此。

+1

我猜他们的意思是10-15秒。以这种方式在15ms内依次执行500个URL是IMO不可能的。 – ceejayoz

+0

@ceejayoz是的,'s'不是'ms'对那个错误感到抱歉。 – AXAI