Php 比get_headers()更快的东西
我正在尝试制作一个PHP脚本,它将尽可能快地检查网站的HTTP状态 我目前正在使用get_headers()并在mysql数据库的200个随机URL的循环中运行它 要检查所有200个,平均需要200米48秒 我能做些什么使它(更快)吗 (我知道fsockopen-它可以在20秒内检查200个站点上的端口80-但这与请求http状态码不同,因为服务器可能会在端口上响应-但可能无法正确加载网站等) 这是密码Php 比get_headers()更快的东西,php,mysql,http-status-codes,fsockopen,get-headers,Php,Mysql,Http Status Codes,Fsockopen,Get Headers,我正在尝试制作一个PHP脚本,它将尽可能快地检查网站的HTTP状态 我目前正在使用get_headers()并在mysql数据库的200个随机URL的循环中运行它 要检查所有200个,平均需要200米48秒 我能做些什么使它(更快)吗 (我知道fsockopen-它可以在20秒内检查200个站点上的端口80-但这与请求http状态码不同,因为服务器可能会在端口上响应-但可能无法正确加载网站等) 这是密码 <?php function get_httpcode($url) { $
<?php
function get_httpcode($url) {
$headers = get_headers($url, 0);
// Return http status code
return substr($headers[0], 9, 3);
}
###
## Grab task and execute it
###
// Loop through task
while($data = mysql_fetch_assoc($sql)):
$result = get_httpcode('http://'.$data['url']);
echo $data['url'].' = '.$result.'<br/>';
endwhile;
?>
您可以尝试使用CURL库。您可以使用同时发送多个请求 例如:
$ch = curl_init('http_url');
curl_setopt($ch, CURLOPT_HEADER, 1);
$c = curl_exec($ch);
$info = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print_r($info);
已更新
看看这个例子 > P>我不知道这是一个你可以考虑的选项,但是你可以用叉子几乎全部运行它们,这样脚本只会比一个请求长一点。 例如,您可以将其添加到以cli模式运行的脚本中,并同时启动所有请求
编辑:您说您要拨打200个电话,因此您可能会遇到数据库连接丢失的情况。问题是由于第一个脚本完成时链接被破坏。为了避免这种情况,您可以为每个子级创建新连接。我看到您正在使用标准的mysql_*函数,因此请确保传递第4个参数,以确保每次都创建一个新链接。还要检查服务器上同时连接的最大数量您好,我也尝试过使用cURL,就像您发布的代码一样。但它是一样的,实际上比get_headers()长一点;尝试提出多重请求,因为我给出了上面的链接。例如,每次10个请求+1个不错的请求!我不知道curl扩展可以并行处理请求。并行?那么,这有效地是另一个线程同时运行吗?您可以使用multi-curl一次执行所有200个请求。响应速度与最慢的服务器一样慢。如果其中一个需要60秒,那么整个请求将需要60秒。但是你可以在curl中设置一个超时。这就是我想要的-我会看看你的链接,谢谢。@MattClarke好的,我很高兴你发现它很有用。。你需要在迭代中运行fork,在迭代中获得结果并ping站点(如果你是孩子)或继续(如果你是父母)我没有听你的话-这种fork业务对我来说是全新的,我甚至不知道它是可能的。@MattClarke it更新了答案,讨论了使用fork时的一个常见问题。。第一次看起来有点复杂是正常的。。如果您决定使用此选项(了解这些系统),您将在php手册页(答案中的链接)上找到很好的资源。。在该页面的评论中可以找到很多好的想法谢谢-我希望能+1你,但是没有足够的代表!