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