Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

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



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt