Ein Droplet für die Benachrichtigung bei Fehlermeldungen (Error 404)
Droplets sind ideal, wenn es darum geht PHP Code an einer beliebigen Stelle, z.B. innerhalb von Fliesstext oder in einem Template auszuführen. Es ist daher kein Zufall, dass die Droplets seit Website Baker 2.8 fester Bestandteil der Distribution sind und im FCK Editor direkt über einen Button aufgerufen werden können.
In dem Artikel Abfangjäger für Fehlermeldungen habe ich beschrieben, wie eigene Fehlerseiten erstellt werden können. Ein wesentlicher Bestandteil einer guten Fehlerseite ist die automatische Benachrichtigung des Webmasters, damit dieser auf den Fehler reagieren kann.
Die automatische Benachrichtigung wird dort über eine Code-Section realisiert, die sich hervorragend in einem Droplet verpacken läßt und die Erstellung einer eigenen Fehlerseite zu einem Kinderspiel macht:
[[error-404?from=server@domain.tld&to=webmaster@domain.tld&server=domain.tld&silent=false]]
Hierbei ist error-404 der Name des Droplets, auf den insgesamt 3 Parameter folgen:
- from ist die E-Mail Adresse, die Website Baker als Absender verwenden soll, hier server@domain.tld.
- to ist die E-Mail Adresse des Webmasters, an die der Fehlerbericht gesendet wird, hier webmaster@domain.tld.
- server ist die Bezeichnung der Website, die als Absender und als Name im Fehlerbericht verwendet wird, ich verwende üblicherweise den Domainnamen, hier also domain.tld.
- silent ist ein optionaler Parameter, mit silent=true wird die Ausgabe durch das Droplet unterdrückt, sonst gibt das Droplet abhängig von der Website Baker Konfiguration einen Durchsuchen Dialog oder eine Sitemap aus.
Das Droplet verschickt aussagekräftige Benachrichtungen, die - soweit verfügbar - den HTTP Referer, Remote IP, Remote Host, Browser, Betriebssystem und Version enthalten:

Die Ausgabe des Droplets auf der Fehlerseite selbst ist abhängig von der Website Baker Konfiguration:
- die Website kann durchsucht werden, es wird ein Suchen Dialog angezeigt
- die Website kann nicht durchsucht werden, es wird mit ShowMenu eine Sitemap angezeigt.
Darüber hinaus unterscheidet das Droplet die eingestellte Sprache der Fehlerseite, ist Deutsch eingestellt, wird die Benachrichtigung in deutscher Sprache verschickt, ansonsten in englischer Sprache.
Der Quelltext für das Droplet:
/**
Droplet for usage within ERROR 404 pages: send e-mail with
further informations to the webmaster and shows, depending
on website baker configuration a searching dialog or a
sitemap.
Please Visit
--> http://phpmanufaktur.de/cms/topics/droplet-error-404.php
for further informations.
(c) 2009 by Ralf Hertsch (Berlin), phpmanufaktur.de
**/
global $wb;
if (!isset($silent)) {
$silent = false;
}
$result = '';
if (LANGUAGE == 'DE') {
define('msg_subject', '[%s] - ERROR 404');
define('msg_intro', '<tr><td colspan="2">Auf dem Server <b>%s</b> [%s] erzeugte der '.
'Aufruf der Seite</td></tr><tr><td colspan="2"> </td></tr><tr><td colspan="2" '.
'style="text-align:center;"><b>%s</b></td></tr><tr><td colspan="2"> </td></tr>'.
'<tr><td colspan="2">einen Fehler.</td></tr><tr><td colspan="2"> </td></tr>'.
'<tr><td colspan="2"><b>Ergaenzende Informationen:</b></td></tr><tr><td colspan="2">'.
' </td></tr>');
define('msg_referer', '<tr><td>HTTP Referer:</td><td>%s</td></tr>');
define('msg_remote', '<tr><td>Remote IP:</td><td>%s</td></tr><tr><td>Remote Host:</td>'.
'<td>%s</td></tr>');
define('msg_browser', '<tr><td>Browser:</td><td>%s</td></tr><tr><td>Betriebssystem:</td>'.
'<td>%s</td></tr><tr><td>Version:</td><td>%s</td></tr>');
define('msg_agent', '<tr><td>HTTP User Agent:</td><td>%s</td></tr>');
define('mail_error', "<p><strong>Erweiterter Fehler</strong>: Die automatische '.
'Benachrichtigung des Webmaster ist fehlgeschlagen (E-Mail Fehler).</p>");
define('search_form', '<form name="search" action="%s" method="get"><input type="text" '.
'name="string" /><input type="submit" name="submit" value="%s durchsuchen ..." /></form>');
}
else {
define('msg_subject', '[%s] - ERROR 404');
define('msg_intro', '<tr><td colspan="2">At the server <b>%s</b> [%s] causes the call '.
'of page</td></tr><tr><td colspan="2"> </td></tr><tr><td colspan="2" '.
'style="text-align:center;"><b>%s</b></td></tr><tr><td colspan="2"> </td></tr>'.
'<tr><td colspan="2">an error.</td></tr><tr><td colspan="2"> </td></tr>'.
'<tr><td colspan="2"><b>Additional Informations:</b></td></tr><tr>'.
'<td colspan="2"> </td></tr>');
define('msg_referer', '<tr><td>HTTP Referer:</td><td>%s</td></tr>');
define('msg_remote', '<tr><td>Remote IP:</td><td>%s</td></tr><tr><td>Remote Host:</td>'.
'<td>%s</td></tr>');
define('msg_browser', '<tr><td>Browser:</td><td>%s</td></tr><tr><td>Operating System:</td>'.
'<td>%s</td></tr><tr><td>Version:</td><td>%s</td></tr>');
define('msg_agent', '<tr><td>HTTP User Agent:</td><td>%s</td></tr>');
define('mail_error', "<p><strong>Extended Error</strong>: The automatically information '.
'of the webmaster failed (E-Mail Error).</p>");
define('search_form', '<form name="search" action="%s" method="get"><input type="text" '.
'name="string" /><input type="submit" name="submit" value="%s searching ..." /></form>');
}
$subject = sprintf(msg_subject, $server);
$message = '<table width="98%"><colgroup><col width="20%"><col width="80%"></colgroup>';
$message .= sprintf(msg_intro, $server, $_SERVER['SERVER_ADDR'], $_SERVER['REQUEST_URI']);
if (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) {
$message .= sprintf(msg_referer, $_SERVER['HTTP_REFERER']);
}
$message .= sprintf(msg_remote, $_SERVER['REMOTE_ADDR'], gethostbyaddr($_SERVER['REMOTE_ADDR']));
if (ini_get('browscap')) {
$browser = get_browser();
$message .= sprintf(msg_browser, $browser->browser, $browser->platform, $browser->version);
}
else {
$message .= sprintf(msg_agent, $_SERVER['HTTP_USER_AGENT']);
}
$message .= '</table>';
if(!$wb->mail($from,$to,$subject,$message)) {
$result .= mail_error;
}
if (!$silent) {
if (SHOW_SEARCH) {
$result .= sprintf(search_form, WB_URL.'/search/index'.PAGE_EXTENSION, $server);
}
else {
ob_start();
echo '<div class="sitemap">';
show_menu2(SM2_ALLMENU, SM2_ROOT, SM2_ALL, SM2_ALL|SM2_ALLINFO, '[li][a][page_title]</a>'.
'<div class="sitemap_desc">[description]</div>', false, '<ul class="sitemap [class]">');
echo '</div>';
$result .= ob_get_contents();
ob_end_clean();
}
}
else {
$result = ' ';
}
return $result;
Vorgeschlagener Name für das Droplet:
error-404
Vorgeschlagene Beschreibung:
For use at error prompting pages, send extended error message to webmaster
Vorgeschlagener Kommentar:
Command line to use: [[error-404?from=server@domain.tld&to=webmaster@domain.tld&server=domain.tld]]
Please look at http://phpmanufaktur.de/pages/topics/droplet-error-404.php for further informations!
Bitte helfen Sie mit, diesen Tipp zu verbessern oder zu ergänzen!
![]()
Ralf Hertsch, 06.09.2009
Kommentare
05.11.2009
dbs
Eon tolles Droplet!
Habe davon gar nichts im WB-Forum gelesen.(?)
Gruß dbs
Hallo dbs,
dieses Droplet ist bei AMASP verhungert, kann ja mal passieren ;-)
Gruß
Ralf
