Каков самый быстрый способ определить, существует ли URL-адрес в PHP?
Мне нужно создать функцию, которая возвращает, является ли URL доступным или допустимым.
В настоящее время я использую что-то вроде следующего для определения допустимого url:
static public function urlExists($url)
{
$fp = @fopen($url, 'r');
if($fp)
{
return true;
}
return false;
}
Похоже, что было бы что-то быстрее, возможно, что-то, что просто забрало заголовок страницы или что-то еще.
3 ответа:
Вы можете проверить код состояния http.
Вот код, который можно использовать для проверки того, что 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"; ?>
Надеюсь, это поможет!