Skocz do zawartości

Robot sprawdzający dostępność strony


vel

Rekomendowane odpowiedzi

Witam

Piszę właśnie skrypt php, który ma być takim mini robotem. Otóż chodzi o to, że dostaje on na wejściu listę linków i ma sprawdzić po kolei każdy, czy dany sajt jest dostępny. W wersji 0.1 alfa zrobiłem to tak, że zasysam zawartość przez fopen i fread strony i sprawdzam w poszukiwaniu znaczników <html> </html> <head> </head>. Jak owe są strona zostaje uznana za "poprawną".

Niestety ten algorytm mocno ssie bo jest czasochłonny - musi wczytać po kolei każdy sajt, a mam tego już na wstępie tylko ok 500 i jest bieda :hello:

Czy ktoś mógłby podpowiedzieć lepszy algo? Chodzi tylko o sprawdzenie, czy pod danym linkiem jest strona, nic więcej. Taki weryfikator linków ;)

Z góry dzięki

Kup sobie nieruchomości Kraków albo apartamenty Zakopane. Obejrzyj też fotoblog Grzegorza Ziemiańskiego Nowa Huta na deser

Odnośnik do komentarza
Udostępnij na innych stronach

hej !

gdy sprawdzasz "czy pod danym linkiem jest sajt" wysylasz zapytanie (request) do serwera, a ten w odpowiedzi wysyla Ci m.in. statusy http oraz kod strony.

wiec jesli serwer odsyla nam statusy kodow http, to wystarczy je odczytac, i juz wiemy czy "pod danym linkiem jest sajt", wszystko bez niekorzystnego sprawdzania htmla ;)

oto najwazniejsze statusy (calosci szukaj na google):

200 - Wszystko OK (succesfull request)
301 - Trwale przeniesiona (moved permanently)
404 - Nie istnieje (not found)

teraz pare linijek sprawdzajacych sajty po socketach (uzywamy do tego celu funkcji fsockopen, jesli nie masz do niej dostepu, to mozesz uzyc albo fopen albo skorzystac z biblioteki curl):

<?php
error_reporting(E_ALL);

// numer portu po ktorym sie laczymy
$port = 80;
// timeout - max czas ile czekamy na odp serwera
$tmout = 30;

// lista sajtow do sprawdzenia
$sites = array('www.wp.pl','www.onet.pl');

// lista kodow
$codes = array(
   '200'=>'istnieje (200 OK)',
   '301'=>'trwale przeniesiona (301)',
   '404'=>'nie istnieje (404)'
);

$cnt = count($sites);
$m = 0;

while($m < $cnt) {
   $rq = fsockopen($sites[$m], $port, $errno, $errstr, $tmout);

   if(!$rq) {
       // blad podczas laczenia
       print '$errstr ($errno)<br />';
   } else {
       // definujemy naglowek
       $out = "GET / HTTP/1.1\r\n";
       $out .= "Host: www.wp.pl\r\n";
       $out .= "Connection: Close\r\n\r\n";

       // i wysylamy go
       fwrite($rq, $out);

       // odbieramy wynik
       $fd = fgets($rq, 128);

       // zamykamy polaczenie
       fclose($rq);

       // filtrujemy z naglowka statusy
       preg_match("#HTTP/1\.. (\d+)#",$fd,$matches);

       // wyswietlamy wyniki
       print 'Strona '.$sites[$m].' '.(isset($codes[$matches[1]]) ? $codes[$matches[1]] : '#nieznany kod#').'.<br />';
       $m++;
   }
}
?>

powodzenia :hello:

jak bedzie zbyt wolne, lub masz pytania to daj znac.

"Lubię samochody i znam się na koniach mechanicznych."

Odnośnik do komentarza
Udostępnij na innych stronach

ok, a co gdy strona nie istnieje i dostajemy w odpowiedzi ładną stronę html z błędem? czy ona w nagłówku będzie miała 404 ? zawsze? czy niekoniecznie

bo interesuje mnie sposób jak najbardziej niezawodny :hello:

Kup sobie nieruchomości Kraków albo apartamenty Zakopane. Obejrzyj też fotoblog Grzegorza Ziemiańskiego Nowa Huta na deser

Odnośnik do komentarza
Udostępnij na innych stronach

ok, a co gdy strona nie istnieje i dostajemy w odpowiedzi ?adna; strone; html z b?e;dem? czy ona w  nag?ówku be;dzie mia?a 404 ? zawsze? czy niekoniecznie

to trzeba sprawdzic ;)

dodaj do listy strone ktora zwraca taki ladny html z bledem.

przykladowa strona a.republika.pl

i czy dostaniemy 404 to zalezy od admina/webmastera.

zasady (rfc?) mowia, ze powinno sie stosowac 404 przy blednych lub nie istniejacych zasobach, ale praktyka czasem daje inne efekty.

bo interesuje mnie sposób jak najbardziej niezawodny :)

nic nie jest niezawodne.

i czy moge; poprosic' o wersje; bez socketów bo nie mam doste;pu do tego

a masz dostep co cURL ?

bo albo cURL albo sockety, fopen to tylko pobiera plik.

no i znalazlem..

lista kod http tutaj

"Lubię samochody i znam się na koniach mechanicznych."

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności