Php 快速获取Url的http响应代码
我知道获取http响应代码非常容易,比如我们可以使用get_headers()函数,也可以使用cURL,但我有300万个url 所以,请告诉我如何快速获取每个url的状态 因为在当前场景中,每个url大约需要1秒的时间,所以您可以计算完成需要多少时间Php 快速获取Url的http响应代码,php,curl,Php,Curl,我知道获取http响应代码非常容易,比如我们可以使用get_headers()函数,也可以使用cURL,但我有300万个url 所以,请告诉我如何快速获取每个url的状态 因为在当前场景中,每个url大约需要1秒的时间,所以您可以计算完成需要多少时间 error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); $row = 1; if (($handle = fopen("2.6MMURL-10-14.csv", "r")) !== FALS
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
$row = 1;
if (($handle = fopen("2.6MMURL-10-14.csv", "r")) !== FALSE) {
$i = 1;
//echo '<pre>';
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
//print_r($data[0]);
$result = getStatus($data[0]);
echo $result."<br />";
// print_r($result);
if($i == 16)
{
echo $i;
//appendToCsv($result);
//exit;
}
$i++;
}
fclose($handle);
}
exit;
function getStatus($fileSource) {
//$fileSource = "www.google.com";
$time = date("Y-m-d H:i:s");
$ch = curl_init($fileSource);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_NOBODY, true);
$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$response = curl_exec($ch);
//print_r($response); exit;
preg_match_all('/^Location:(.*)$/mi', $response, $matches);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
//!empty($matches[1]) ? $redirect = trim($matches[1][0]) : $redirect = 'No redirect found';
$redirect = trim($matches[1][0]);
$time.= date("Y-m-d H:i:s");
$array = "$fileSource, $retcode, $trim($matches[1][0], $time";
return $array;
//print_r($last_url); exit;
//curl_close($ch);
}
function appendToCsv($data) {
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="sample.csv"');
$fp = fopen('php://output', 'w');
foreach ( $data as $line ) {
$val = explode(",", $line);
fputcsv($fp, $val);
}
fclose($fp);
}
error\u reporting(E\u ALL&~E\u NOTICE&~E\u WARNING);
$row=1;
如果($handle=fopen(“2.6MMURL-10-14.csv”,“r”))!==FALSE){
$i=1;
//回声';
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
//打印(数据[0]);
$result=getStatus($data[0]);
回显$result。“
”;
//打印(结果);
如果($i==16)
{
echo$i;
//附录(结果);
//退出;
}
$i++;
}
fclose($handle);
}
出口
函数getStatus($fileSource){
//$fileSource=“www.google.com”;
$time=日期(“Y-m-d H:i:s”);
$ch=curl\u init($fileSource);
curl_setopt($ch,CURLOPT_NOBODY,true);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.8.1.1)Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_头,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false);
curl_setopt($ch,CURLOPT_NOBODY,true);
$last\u url=curl\u getinfo($ch,CURLINFO\u有效的\u url);
$response=curl\u exec($ch);
//打印($response);退出;
preg_match_all('/^Location:(.*)$/mi',$response,$matches);
$retcode=curl\u getinfo($ch,CURLINFO\u HTTP\u代码);
卷曲关闭($ch);
//!empty($matches[1])?$redirect=trim($matches[1][0]):$redirect='未找到重定向';
$redirect=trim($matches[1][0]);
$time.=日期(“Y-m-d H:i:s”);
$array=“$fileSource,$retcode,$trim($matches[1][0],$time;”;
返回$array;
//打印(最后一个url);退出;
//卷曲关闭($ch);
}
函数appendToCsv($data){
标题(“内容类型:应用程序/excel”);
标题('Content-Disposition:attachment;filename=“sample.csv”');
$fp=fopen('php://output","w",;
foreach($行数据){
$val=分解(“,”,$line);
fputcsv($fp$val);
}
fclose($fp);
}
我建议使用curl\u multi\u exec并行运行多个HEAD HTTP请求。HEAD请求与GET相同,但没有响应正文。这也会节省一些带宽/时间。您需要使用pcntl\u fork()
请参见到目前为止您尝试了哪些代码?开始并行运行请求。除非您是在300波特的拨号线路上执行此操作,否则您几乎无法加快网络组件的速度。因此,要么并行运行更多请求(简单),要么找到某种方法缩短每个请求的时间(困难/不可能).使用wget,类似这样的东西-我添加了代码@Mr.Concolato