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"> '; echo 'Name: ' . $host['name'] . ' '; echo '(Offline: ' . $host['url'] . ')<br><br>'; } else { echo '<img src="sonne_1.png" align="absmiddle"> ';
echo '<a href="'.$host['url'].'" target="_blank">' .
$host['name'] . '</a> '; 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.
|