chevron-left chevron-right

[PHP]Jak sprawdzić nie działający adres URL?

Postanowiłem napisać krótki artykuł o tym, jak sprawdzić nie działający adres URL?
Uważam, że jest to przydatne rozwiązanie, bo dzięki temu możemy uniknąć problemów z dotarciem do treści na stronie.
Skrypt ten opiera się na bibliotece cURL znajdującej się standardowo w większości serwerów obsługujących PHP. Co będzie można zobaczyć w dalszej części artykułu.

Zasada jest prosta. Najpierw tworzymy formularz w HTML, który będzie nam służył do wprowadzania danych strony www do sprawdzenia:

<form action="broken-url.php" method="post">
   <label for="url"><span>Wpisz adres strony (bez http://):</span><input type="text" name="url" /></label>
   <label><input type="submit" name="submit" value="Wyślij" /></label>
</form>
Teraz należałoby napisać funkcję, która będzie sprawdzała czy link jest prawidłowy. Funkcja wygląda następująco:
function sprawdz($url)
{
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_HEADER, 1);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$data = curl_exec($curl);
	$naglowki = curl_getinfo($curl);
	curl_close($curl);
	return $naglowki['http_code'];
}
Ostateczny wygląd kodu takiego narzędzia do sprawdzania linków wygląda następująco:
< ?php
function sprawdz($url)
{
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_HEADER, 1);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	$data = curl_exec($curl);
	$naglowki = curl_getinfo($curl);
	curl_close($curl);
	return $naglowki['http_code'];
}
if(!isset($_POST['submit'])) {
?>
<form action="broken-url.php" method="post">
   <label for="url"><span>Wpisz adres strony (bez http://):</span><input type="text" name="url" /></label>
   <label><input type="submit" name="submit" value="Wyślij" /></label>
</form>
< ?php
}
else {
	$url = $_POST['url'];
	$powrot = '<br/>Wróć do formularza';
	if(!filter_var($url, FILTER_VALIDATE_URL)) {
		$stan = sprawdz($url);
		if($stan == '200') {
			echo 'Link jest prawidłowy i działa.'.$powrot;
		}
		else
			echo 'Link nie istnieje!'.$powrot;
	}
	else
		echo 'Podano błędny adres URL.'.$powrot;
}
?>
W dodatkowym kodzie, który służy tu do sprawdzania czy dane zostały wysłane, zastosowałem funkcję sprawdzającą poprawność linków, która została zaimplementowana w PHP w wersji 5.2 i wyżej - filter_var($url, FILTER_VALIDATE_URL). Jest to bardzo użyteczna metoda na sprawdzenie czy link jest prawidłowy. Dzięki temu unikamy obciążenia serwera związanego z przetwarzaniem standardowych wyrażeń regularnych w celu sprawdzenia poprawności adresu. Poza tym, jest ona wygodniejsza.

Demo z tego artykułu można zobaczyć pod tym adresem: PHP sprawdzenie adresów www.
Mam nadzieję, że ten artykuł okaże się dla Ciebie przydatny.