09 08 2007 Nils Hitze
Heute zeige ich ein Beispiel, wie man in PHP "Fatal Errors" besser handeln kann. Folgende beispiel nutzt die error_prepend_string und error_append_string um mehr aus ein Fehler zu machen, und funktioniert auch beim timeout, wo i.d.r. nichts mehr als der typische "Fatal Error...." aus PHP kommt. Man braucht ausser diese linien eine Datei (hier fatal_error.php genant) die nach dem fehler aufgeruft wird. Dort kann man z.B. ein E-Mail schicken und eine bessere HTML Seite an die Benutzer zeigen.
/**
 Show an error page when a fatal error ocurrs

 pre-/appends an HTML form to a PHP error to be able to redirect to a user-
 friendly error page.

 @param   string  $errorPage  Path to the custom error page where the user
                              should be redirected to
 @return  void
*/
function catchFatalErrors($errorPage = 'fatal_error.php')
{

// error display needs to be turned on
ini_set('display_errors','On');

// Prepend a non displaying DIV element to hide the error message and
// store the PHP error in a hidden field
$phperror = '<div id="phperror" style="display:none">'.
'<form method="POST" action="'.$errorPage.'" name="FatalError">'.
'<input type="hidden" name="hiddenErrorMsg" value="';
ini_set('error_prepend_string', $phperror);

if (file_exists($errorPage)) {

// Append javascript code which submits the form to the custom error page, if the error page exists
$phperror = '"></form></div>'.
'<script type="text/javascript">'.
'document.forms['FatalError'].submit();'.
'</script>';

} else {

// If error page does not exist hide the PHP error message and display
// a customized error text
$phperror = '"></form></div>'.
'A critical error occurred, please contact support.';

}

ini_set('error_append_string', $phperror);

}

// This calls the function to enable the functionality
catchFatalErrors('framework/modules/main/fatal_error.php');

Bookmark   at del.icio.us Digg  Technorati

Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)
09 08 2007
#1 Nils (Antwort)

Super. Danke daß ihr euch alle so rege Beteiligt. Ich hoffe es bleibt dabei und postet auch ruhig Webseiten die euch wichtig erscheinen, oder wenn ihr einige Zeit in GoogleSuche nach etwas bestimmten investiert habt, raus damit.
Kommentar (1)

Kommentar schreiben


Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss um dieses Verfahren anzuwenden.
CAPTCHA

Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden