确定PHP中是否存在URL的最快方法是什么?
我需要创建一个函数,该函数返回URL是否可访问或有效 我目前正在使用类似以下内容来确定有效的url:确定PHP中是否存在URL的最快方法是什么?,php,url,Php,Url,我需要创建一个函数,该函数返回URL是否可访问或有效 我目前正在使用类似以下内容来确定有效的url: static public function urlExists($url) { $fp = @fopen($url, 'r'); if($fp) { return true; } return false; } 似乎会有更快的东西,可能只是获取页眉之类的东西。您可能会被限制为发送某种HTTP请求。然后您可以检查HTTP状态代码 确保只
static public function urlExists($url)
{
$fp = @fopen($url, 'r');
if($fp)
{
return true;
}
return false;
}
似乎会有更快的东西,可能只是获取页眉之类的东西。您可能会被限制为发送某种HTTP请求。然后您可以检查HTTP状态代码
确保只发送一个“HEAD”请求,这不会收回所有内容。这应该足够并且足够轻。您可以使用curl,如下所示:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true); // set to HEAD request
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // don't output the response
curl_exec($ch);
$valid = curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200;
curl_close($ch);
你可以查一下
下面是一段代码,可以用来检查url是否返回2xx或3xx http代码,以确保url正常工作
<?php
$url = "http://stackoverflow.com/questions/1122845";
function urlOK($url)
{
$url_data = parse_url ($url);
if (!$url_data) return FALSE;
$errno="";
$errstr="";
$fp=0;
$fp=fsockopen($url_data['host'],80,$errno,$errstr,30);
if($fp===0) return FALSE;
$path ='';
if (isset( $url_data['path'])) $path .= $url_data['path'];
if (isset( $url_data['query'])) $path .= '?' .$url_data['query'];
$out="GET /$path HTTP/1.1\r\n";
$out.="Host: {$url_data['host']}\r\n";
$out.="Connection: Close\r\n\r\n";
fwrite($fp,$out);
$content=fgets($fp);
$code=trim(substr($content,9,4)); //get http code
fclose($fp);
// if http code is 2xx or 3xx url should work
return ($code[0] == 2 || $code[0] == 3) ? TRUE : FALSE;
}
echo $url;
if (urlOK($url)) echo " is a working URL";
else echo " is a bad URL";
?>
还要检查2xx和3xx,因为它可能被永久移动,或者是另一个表示url工作的http代码。