Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Server oder Webseite auf Online/Offline testen


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 4 >= 4.0.3
  • PHP 5
  • CURLBibliothek

Datei(en)

ping_site.php, formStyle.css

Problem

Sie bieten ein Linkverzeichnis auf Ihrer Webseite an und müssen immer wieder einmal feststellen, dass URLs nicht erreichbar sind. Das ist sehr ärgerlich, denn Ihre Besucher verbinden dies oft mit dem Gedanken, dass Ihre Seite nicht aktuell ist und Sie sich nicht um den Inhalt kümmern.

Wer möchte schon gerne, dass irgendjemand so etwas über einen denkt? Natürlich niemand! Wir werden uns deshalb dieses Problems annehmen.

Lösung

Die Lösung besteht einfach darin, dass bei jedem Seitenaufruf alle Links zuerst getestet und nur angezeigt werden, wenn sie online sind. Aus diesem Grund speichern wir unsere Verbindungen in einem Array und prüfen diese dann nacheinander.

Je nach Ergebnis wird das Array um die Werte „TRUE“ oder „FALSE“ erweitert. Bei der späteren Ausgabe werden dann nur die Server verlinkt, die auch erreichbar waren. Zusätzlich wird ein farbiges Bild angezeigt, nicht erreichbare Webseiten erhalten ein graues Bild.

function pingSite($webserver)
   @param   array   $webserver
   @return   array   $webserver

Die Funktion pingSite() erwartet als Parameter ein Array mit allen zu prüfenden Servern bzw. Webseiten. Im ersten Schritt durchlaufen wir das komplette Array (36) mit den verschiedenen zu prüfenden URLs. Wir initialisieren (39) anhand einer URL aus dem Array zuerst eine neue Session und setzen im nächsten Schritt einen Time-Out-Wert (41) für diese Verbindung fest.

Dieser Wert sorgt dafür, dass alle nachfolgenden CURL-Funktionen in dieser Zeit abgearbeitet werden müssen. Wird die Zeit überschritten, so endet die Verbindung. Sie können hier ruhig einen kleineren Wert einstellen, da die kommenden Aktionen nicht viel Zeit benötigen werden.

Da wir lediglich den Status der zu prüfenden Webseite abfragen wollen und uns die eventuelle Fehlermeldung nicht interessiert, setzen wir den Parameter (43) für die Fehlermeldungen auf 1. Sollten Sie die Fehlermeldungen allerdings benötigen, müssen Sie hier einen Wert von 0 (Null) eintragen. Sie erhalten dann jeweils im Fehlerfall, wenn der HTTP-Code größer ist als 300, einen Fehlertext geliefert.

Wir müssen jetzt noch den Transfermodus berücksichtigen. Die angepingte Webseite soll ja nicht in unserer Seite inkludiert, sondern nur abgefragt werden. Aus diesem Grund setzen wir den Parameter (45) für den Transfer auf 1. Wenn Sie hier eine 0 (Null) eingeben, wird neben Ihrer Seite auch die Seite des entfernten Hosts angezeigt!

Wir haben jetzt lediglich die Parameter gesetzt, müssen diese aber noch ausführen (47). Aus diesem Grund sollten alle Parameter vorher gesetzt werden, damit die initialisierte Session durch den Befehl curl_exec() (47) ausgeführt werden kann.

Sollte der Server oder die Webseite nicht erreichbar sein, erhalten wir als Rückgabewert entweder „TRUE“ (53) oder „FALSE“ (49). Wir speichern das Ergebnis „TRUE“ (55) oder „FALSE“ (51) in unser bestehendes Array, schließen die Verbindung (58) zum geprüften Server und geben das Array an unsere aufrufende Stelle zurück (62).

033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
function pingSite($webserver


   foreach (
$webserver as $key => $host
    { 
   
        
$fp curl_init($host['url']);
        
        
curl_setopt($fp,CURLOPT_TIMEOUT,10);
        
        
curl_setopt($fp,CURLOPT_FAILONERROR,1);
        
        
curl_setopt($fp,CURLOPT_RETURNTRANSFER,1);
        
        
curl_exec($fp);
        
        if (
curl_errno($fp) != 0)  
        { 
            
$webserver[$key]['status'] = false;
        } 
        else  
        { 
            
$webserver[$key]['status'] = true;
        } 
        
        
curl_close($fp);
   
    }
    
    return 
$webserver;

Beispiel 10.1: ping_site.php

Nachfolgend sind nur noch ein paar Konfigurationsparameter zu setzen. Wir benötigen zum einen ein Bild für die Online-Variante (66), zum anderen ein Bild (67), falls der Server oder die Webseite nicht zu erreichen war.

Die eigentlichen zu prüfenden URLs brauchen Sie dann nur in das jeweilige Array eintragen (69, 70). Statt des Namens können Sie hier auch die URL angeben. Falls Ihre URLs aus einer Datenbank kommen, können Sie diese bequem über eine WHILE-Schleife in das Array eintragen lassen.

Wir müssen jetzt zur Überprüfung unser komplettes Array an die Funktion pingSite() übergeben (81). Als Rückgabewert erhalten wir das modifizierte Array mit den Statusergebnissen „TRUE“ oder „FALSE“.

Wir durchlaufen dann dieses Array (92) und fragen jeweils den Status ab (94). War die aktuelle Verbindung erfolgreich, also die Seite online, so springen wir in den else-Zweig (100), verlinken die URL und zeigen unser farbiges Bildsymbol an (siehe Ausgabe). War die Verbindung nicht erfolgreich (94), verlinken wir die URL nicht und zeigen zusätzlich ein graues Bildsymbol an.

066:
067:
068:
069:
070:
071:
072:
073:

074:
075:
076:
077:
078:
079:

080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
102:
103:

104:
105:
106:
107:
108:
109:
110:
$pictureOnline 'sonne_1.pnp';
$pictureOffline 'sonne_0.png';

$webserver[0]['name'] = 'SELFPHP';
$webserver[0]['url'] = 'http://www.selfphp.de';

$webserver[1]['name'] = 'SELFPHP Funktionsreferenz';
$webserver[1]['url'] = 'http://www.selfphp.de/funktionsreferenz/
          index.php'
;

$webserver[2]['name'] = 'SELFPHP Forum';
$webserver[2]['url'] = 'http://www.selfphp.de/forumXXL';

$webserver[3]['name'] = 'SELFPHP Download';
$webserver[3]['url'] = 'http://downloads.selfphp.de/
       ?file=selfphp_3.0_.tar.gz'
;

$webserver pingSite($webserver);
?>
<html>
<head>
<title>Downloads</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="formStyle.css" rel="stylesheet" type="text/css">
</head>

<body>
<?PHP
foreach ($webserver as $key => $host

   if(!
$host['status'])
   {
    echo 
'<img src="sonne_0.png"  align="absmiddle">&nbsp;&nbsp;';
    echo 
'Name: ' $host['name'] . '&nbsp;';
    echo 
'(Offline: ' $host['url'] . ')<br><br>';
   }
   else
   {
       echo 
'<img src="sonne_1.png"  align="absmiddle">&nbsp;&nbsp;';
       echo 
'<a href="'.$host['url'].'" target="_blank">' 
             $host
['name'] . '</a>&nbsp;';
    echo 
'<br><br>';
   }
}  

?>
</body>
</html>
Beispiel 10.2: ping_site.php

Wie Sie sehen, haben wir jetzt eine sehr schöne Darstellung unserer Downloadseite. Ihre Besucher werden es zu schätzen wissen und „klicken“ nicht mehr ins Leere, falls eine Seite nicht erreichbar ist.

Ausgabe im Browser



Abbildung 10.2: PingSeite



 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt