2016-05-05 13 views
0

Ich muss ein PHP-Skript erstellen, das erfolgreich überprüfen kann, ob eine Website derzeit online/noch aktiv ist.Überprüfen, ob eine Website mit einem PHP-Skript online ist

Ich habe eine Liste von rund 3000 Websites zu überprüfen, und ich möchte einen CRON-Job einrichten, um das Skript täglich auszuführen, um sicherzustellen, dass die Seiten noch aktiv sind.

Ich habe einige der Forschung getan und gebaut etwas mit diesem Beispiel:

<?php 

     if (isDomainAvailible('http://www.css-tricks.com')) 
     { 
       echo "Up and running!"; 
     } 
     else 
     { 
       echo "Woops, nothing found there."; 
     } 

     //returns true, if domain is availible, false if not 
     function isDomainAvailible($domain) 
     { 
       //check, if a valid url is provided 
       if(!filter_var($domain, FILTER_VALIDATE_URL)) 
       { 
         return false; 
       } 

       //initialize curl 
       $curlInit = curl_init($domain); 
       curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10); 
       curl_setopt($curlInit,CURLOPT_HEADER,true); 
       curl_setopt($curlInit,CURLOPT_NOBODY,true); 
       curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true); 

       //get answer 
       $response = curl_exec($curlInit); 

       curl_close($curlInit); 

       if ($response) return true; 

       return false; 
     } 
?> 

Aber es immer mal aus nach 300 oder so überprüft, wohl wissend, dass dies eine PHP-Ausführung Problem sein könnte, ich habe mich gefragt, ob es war eine bessere oder schnellere Methode, diese Websites zu überprüfen.

+0

seine Arbeits script & dauerte 5 Sekunden auszuführen für die Überprüfung einzelner Websites. – Mohini

+0

Ja, es ist ein funktionierendes Skript, aber 5 Sekunden pro Website, multipliziert mit über 3000 Seiten, bedeuten 250 Minuten, was ich nicht für eine machbare Lösung halte? – SNpn

+0

Sie können die Leistung erhöhen, indem Sie die Funktion [multicurl] (http://www.php.net/manual/en/function.curl-multi-init.php) verwenden. Es ist ein bisschen schwierig, aus dem offiziellen Handbuch zu verstehen, wie man es richtig benutzt. Daher ist es besser, einen Multi-Curl-Wrapper wie [Rolling Curl Mini] (https://github.com/hindmost/rolling-curl-mini) zu verwenden (plug!). – hindmost

Antwort

0

Angenommen, dass die Verknüpfungen in einer Datenbank gespeichert sind, können Sie im Feld date der Tabelle date z. B. "last_check" hinzufügen und das Datum nach der Überprüfung aktualisieren.

aber 5 Sekunden pro Standort, multipliziert mit über 3000 Standorten bedeutet 250 Minuten, die ich glaube nicht, ist eine machbare Lösung? - SNpn

Ihre SQL-Abfrage sollte 'last_check' auswählen, wobei 'last_check' nicht dem aktuellen Datum entspricht. Beschränken Sie auf 10 Ergebnisse pro Abfrage.

Legen Sie Ihre Cron, um das PHP-Skript jede Minute, von Mitternacht bis 06.00 Uhr.

* 0-6 * * * * PATH/TO/YOUR/PHP/SCRIPT 
+0

Er nutzt das nicht als Cron überhaupt;) Vielleicht ein bisschen mehr dazu – Robert

+0

@Robert Er will einen Cron-Job einrichten, hieß es in einem Post und ich habe eine Lösung geschrieben. – Salines

+0

Mein schlechter, lesen Sie diesen Teil. – Robert

0

Sie auch solche Funktionen wie fopen(), wenn allow_url_fopen Richtlinie ist an verwenden:

$handle = fopen("http://www.example.com/", "r"); 

oder stream_context_create():

$opts = array('http' => array(
    'method'=>"GET", 
)); 
$context = stream_context_create($opts); 
$fp = fopen('http://www.example.com', 'r', false, $context); 
fpassthru($fp); 
fclose($fp); 
+0

ist fopen schneller als curl()? – SNpn

+0

Ich habe solche Tests nicht gemacht. Ich habe mögliche Alternativen gezeigt – Taras

Verwandte Themen