Witam,
mam pytanie, jak sprawdzić (np. za pomocą Curla czy sokcetów) czy dana strona istnieje czy też nie.
Tzn chodzi mi o to, czy pod adresem URL znajduje się aktualnie jakaś zawartość, czy po prostu nie znaleziono strony.
Pozdrawiam
Witam,
mam pytanie, jak sprawdzić (np. za pomocą Curla czy sokcetów) czy dana strona istnieje czy też nie.
Tzn chodzi mi o to, czy pod adresem URL znajduje się aktualnie jakaś zawartość, czy po prostu nie znaleziono strony.
Pozdrawiam
Jeśli strona nie istnieje, to serwer zwróci kod błędu 404. Za pomocą socketów możesz bezpośrednio podłączyć się do zdalnego hosta i przy niewielkie wiedzy na temat protokołu HTTP w prosty sposób to sprawdzić. CURL natomiast AFAiR zwraca odpowiedni kod błędu.
Można również tak:
$content = file_get_contents('http://adres.pl/strona.html');
if (!$content) {
echo('Error');
} else {
echo('OK');
}
Demonical Monk napisał(a)
Można również tak:
$content = file_get_contents('http://adres.pl/strona.html');
if (!$content) {
echo('Error');
} else {
echo('OK');
}
a czy to nie zwróci czasem strony błędu np apache i prawie zawsze będzie OK ?
poza tym to pobierze całą stronę więc jeśli strona duża a łącze małe to to sprawdzenie będzie długo trwało
polecam fsockopen i wysłanie tylko jednej linii:
HEAD /strona.html
i odebranie tylko jednej linii z kodem (200 jeśli jej, 404 jeśli nie ma, ew. możesz obsłużyć też inne albo przyjąć że wszystkie poza 40x świadczą o poprawności [no chyba że obsłużysz przekierowania itp ...])
Następujący kod
<?php
$zawartosc = @file_get_contents("http://arcym111.shost.pl/");
if($zawartosc)
echo "OK";
else
echo "Error";
?>
funkcjonował dobrze, warningi z funkcji file_get_contents były następujące
failed to open stream: php_network_getaddresses: getaddrinfo failed: hostname nor servname provided
choć jeśli na stronie np. jest przekierowanie 301 albo 302 to tym sposobem nie wykryjesz tego.