Kom ihåg mig?
Home Menu

Menu


Tips: Felrapportering i PHP

Ämnesverktyg Visningsalternativ
Oläst 2005-08-23, 16:14 #1
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Att ge ordentlig felrapportering på en utvecklingsserver samt för admins är egentligen en självklarhet, men jag har sett skräckexempel där webbutvecklare sitter och programmerar direkt mot säkerhetsmässigt uruselt konfigurerade tiokronors-webbhotell där man inte ens har tillgång till felloggen. Även om man har konfigurerat PHP vettigt på utvecklingssajten/-servern (error_reporting = E_ALL, display_errors = On, log_errors = On) kan man missa en hel del felutskrifter. På sidor som inte skriver ut något innehåll utan bara gör en redirect är det omöjligt att hinna se om något fel inträffar. Visst kan man ha som vana allt regelbundet kika i felloggen, men det är inte på långa vägar lika smidigt som att se felen direkt i webbläsaren. Därför skriver jag den här jätteenkla guiden för ett mer funktionsdugligt och säkrare Internet-Sverige.

1. Inkludera den här funktionen:
Kod:
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
	switch($errno)
	{
  case E_USER_ERROR:
 	echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
 	echo " Fatal error in line $errline of file $errfile";
 	echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
 	echo "Aborting...<br />\n";
 	exit(1);
 	break;

 case E_USER_WARNING:
 	echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
 	exit(1);
 	break;

 case E_USER_NOTICE:
 	echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
 	exit(1);
 	break;
 	
 default:
 	echo "Unkown error type: [$errno] $errstr<br />\n";
 	exit(1);
 	break;
	}
}

//myErrorHandler() är en modifierad variant av den som finns på http://se.php.net/manual/en/function.set-e...ror-handler.php. Modifieringen består av att jag lagt till "exit(1)" på fler ställen. Mer information finns på nämd URL.
För admins skulle man kunna byta ut "exit(1)" för småfel mot:
Kod:
flush();
ob_flush();
sleep(5);
Det medger att felmeddelandet förhoppningsvis syns och uppmärksammas av surfaren under en 5 sekunder lång paus innan scriptet fortsätter. Resultatet blir att sajten är brukbar även vid mindre fel.

2. Följande kod aktiverar den nya fina felhanteraren och bör köras så tidigt i exekveringen som möjligt. Detta bör endast göras för administratörer och för CLI (PHP exekverat från shell/dosfönster) samt på utvecklingssajten/-servern. Vanliga användare skall alltså inte se felutskrifter då detta kan leda till exploatering av säkerhetsluckor i koden.
Kod:
set_error_handler("myErrorHandler");

Det vore bra med ett eget forum för tips och tricks.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 11:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017