Was gebt Ihr beim PHP Error Reporting aus ?

Sterndi

Sterndi

Mitglied
Thread Starter
Dabei seit
24.03.2004
Beiträge
508
Reaktionspunkte
0
Hallo!

Ich habe vor kurzem einen Server lokal aufgesetzt auf mac os x und gebe in php nomendan keine errors aus.

Was für errors gebt ihr alle aus.
Würde mich nur intressieren ;)
 
In der Entwicklungsumgebung 2039. :cool:
 
Ich arbeite sehr viel mit Perl, aber das macht für die Benatwortung der Frage keinen Unterschied.

Ich benutze sehr viel eigene Fehlerkontrolle z.B. mit 'or die "Fehler: $!\n!";' insbesondere bei kritischen Aktionen wie Dateioperationen (öffnen, lesen, schreiben, anlegen von Dateien), Datenbankzugriffen, Zugriffen auf externe Server, Versenden von Mails etc.

Das hat den Vorteil, dass man selber Steuern kann was im Fehlerfall passiert, welche Meldungen ausgegeben werden und ob das Skript abgebrochen wird oder nicht.

HTH
 
in produktiven Umgebungen wird's per php.ini komplett ausgeschaltet. Dann include ich mir dieses Skript:
PHP:
<?
// Kein Fehler wird angezeigt
error_reporting(0);

// Fehler werden mit eigener Funktion bearbeitet
set_error_handler('ErrorHandler');

// Funktion versendet Mail
function ErrorHandler($errno,$errstr,$errfile,$errline) {
	$error_msg	= " - Es ist folgender Fehler auf Ihrer Seite aufgetreten:\n\n".$errstr."\n\nDatei: ".$errfile."\nZeile: ".$errline."\nDatum: ".date("d.m.Y, H:i:s")
	$email_addr	= "spam@nospam.de";
	$remote_dbg = "localhost";
	$email		= true;
	$stdlog		= true;
	$display	= false;// Fehleranzeige
	$header		= false;// nur mit ob_start();
	$notify		= true;
	$halt_script= true;

	switch($errno) {    
	case E_USER_NOTICE: 
		case E_NOTICE: 

			$halt_script= false;
			$email		= false;
			$type		= "Notice";
			break;

		case E_USER_WARNING: 
		case E_COMPILE_WARNING: 
		case E_CORE_WARNING: 
		case E_WARNING: 

			$halt_script= false;
			$type		= "Warnung";
			break;

		case E_USER_ERROR: 
		case E_COMPILE_ERROR: 
		case E_CORE_ERROR: 
		case E_ERROR: 

			$type		= "Fatal Error";
			$header		= false;
			break;

		case E_PARSE: 

			$type		= "Parse Error";
			break;

		default: 

			$type		= "Unbekannter Fehler";
			break;
	}

	if($notify) {
		$error_msg		= "Fehlertyp: ".$type.$error_msg;

		if($email)	error_log($error_msg, 1, $email_addr);
		if($remote)	error_log($error_msg, 2, $remote_dbg);
		if($display)echo nl2br($error_msg);
		if($stdlog) {
			if($log_file == "") error_log($error_msg, 0);
			else error_log($error_msg."\n", 3, $log_file);
		}
		if($header)	header('Location: http://'.$_SERVER['HTTP_HOST'].'/error/errorphp.php');
	}
	if($halt_script) exit -1;
}
?>

Es wird ne vorgefertigte Mail verschickt und wenn man mag ein anpassbarer Fehler angezeigt. Lass ich aber nur manuell bei wirklich kritischen Operationen, ansonsten kann's dem User wirklich egal sein, ob im Hintergrund ein Fehler aufgetreten ist.
 
Zuletzt bearbeitet:
Bei jeder Funktion, die scheitern kann, einen user_error mit der gesamten Umgebung...
 
Danke für eure rasche antworten ;)

Die möglichkeiten sind unendlich ich überleg nemlich welche ich am server anzeigen lassen soll bzw. welche nicht. Das problem ist ich programmiere nebenbei auf den server und wenn ein fehler entsteht dann kann ich nicht rausfinden wo (wenn ich das error reporting ausgeschalten hab)

ansonsten wenn ich es einschalte kommen sämtliche meldungen weil alles undefiniert ist *G* und das ist ja a net schön :)
 
Sterndi schrieb:
ansonsten wenn ich es einschalte kommen sämtliche meldungen weil alles undefiniert ist *G* und das ist ja a net schön :)

Naja, das error_reporting hat ja mehrere Stufen. Wenn Du die Warnungen nicht angezeigt bekommen magst, dann setz es halt einfach auf Error.

Da die nativen PHP-Fehlermeldungen aber für den User sehr kryptisch sind und auch Details verraten, die man vielleicht nicht unbedingt weltweit abrufbar gestalten mag empfehle ich mein Skript ;) oder ähnliche Lösungen mit Mail-Versand.

Fehler kommen per Mail dann so bei mir an:
Code:
Fehlertyp: Warnung - Es ist folgender Fehler auf Ihrer Seite aufgetreten:

mysql_connect() [<a href='http://www.php.net/function.mysql-connect'>function.mysql-connect</a>]: Access denied for user: 'root@localhost' (Using password: YES)

Datei: /www/htdocs/jakob/data/config.php
Zeile: 17
Datum: 31.10.2005, 22:59:25
 
Jakob schrieb:
Naja, das error_reporting hat ja mehrere Stufen. Wenn Du die Warnungen nicht angezeigt bekommen magst, dann setz es halt einfach auf Error.
Genau! error_reporting ist ja keine globale Rahmenbedingung. Du kannst es in jedem Script einstellen wie Du es möchtest. Global komplet ausstellen und in den Dateien in denen Du arbeitest setzt Du ein E_ALL, oder was immer Dir beliebt.
 
Zurück
Oben Unten