Eurokicker
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 17.07.2004, 00:36   #1
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt

Ich hab das ERROR Chaos...


Hi

Hab gerade das Error-Kapitel von "Besser PHP programmieren" durchgelesen. Ich hab mir jetzt fest vorgenommen besser mit Errors umzugehen, als viele einfach mit @ zu ignorieren.

Aber ich hab momentan noch ein Verständnisproblem: PHP5 -> Wenn ich Probleme mit try{}catch(){} abfange, lösen diese FEhler nicht auch z.B. E_NOTICE etc. aus? Oder kann man mit try-catch nur harmlose abfangen und der Rest geht an diese E_NOTICE und Konsorte? Wie empfiehlt es sich am besten mit Fehlern umzugehen?

Am liebsten würde ich eine ganze Klasse selbst schreiben aber eben, ich frage mich ob mir da die Error Handler von PHP nicht in die Quere kommen. Wie geht ihr mit Errors um? Habt ihr das Tracking on? Eure eigenen Handler oder eben sogar ne Klasse? Und speichert ihr es über die ini-Einstellung oder erzeugt ihrs selber? Was ist zu bevorzugen?

So, jetzt bin ich k.o und gehe ins Bett.
Bin gespannt auf eure Antwort..
GrUsS
MiChAeL
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten


Alt 17.07.2004, 02:54   #2
Guest
 
Registriert seit: Aug 2002
Strogij hilft, wo's gehtStrogij hilft, wo's geht
Wie ich bereits sagte: Ausnahmen haben nichts mit Errors/Fehlern beim Parsen von Scripten zutun! Das verwirrt manchmal nur den Kopf, daß man Fehlerbehandlungen dazu sagt.
Strogij ist offline   Mit Zitat antworten
Alt 17.07.2004, 09:07   #3
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt
aha demfall werden solche Parser Errors (weiterhin) von PHP selbst (standardmässig) abgefangen und den Rest wie MySQL Verbindung die nicht klappt etc, kann man selber machen?

Wie machst du das mit den Errors? Eigene Klasse oder Logfile automatisch schreiben lassen?
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten
Alt 18.07.2004, 13:59   #4
TP-Senior
 
Registriert seit: Aug 2003
Ort: Kaiserslautern
khromium macht alles soweit korrekt
Also ich bin im Moment auch an meiner Fehler-'behandlung' am rumspielen. Für mich habe ich zumindest eine ganz gute Lösung gefunden. Ich arbeite mit eine erweiterten Exceptionsklasse (PHP5) und mit einer Funktion, die den PHP internen errorhandler überschreibt. Bin damit auch bis jetzt ganz gut gefahren. Das ganze System ist aber noch nicht ganz fertig. Kannst dir die Dateien ja mal angucken und dir deins dabei denken ^^.

ExtException.class.php

PHP-Code:
    class ExtException extends Exception
    
{
        
// properties
        
        
public $errorTypes;        // 0:Notice, 1:Warning, 2:Fatal error(stops), 3:Database error, 4:Fatal Database error(stops)
        
protected $errorType;
        
        static protected 
$errorMailed FALSE;        
        static protected 
$errorNumber 0;
        
        static protected 
$displayErrors;            static protected $errorLogFile;            static protected $debug;
        static protected 
$errorEmailAddress;
        
        protected 
$errorString;
        protected 
$sqlString;
        
        
// constructor
        
        
function __construct($strMessage=NULL,$errorType=0,$sqlString=NULL)
        {
            
self::$errorNumber++;
            
parent::__construct($strMessage);            
            if (
$errorType || $errorType 4)
            {
                
$errorType 0;
            }
            
$this->sqlString $sqlString;            
            
$this->errorType $errorType;    
            if(empty(
self::$displayErrors))
                
self::$displayErrors Config::getValue("displayErrors");
            if(empty(
self::$errorLogFile))
                
self::$errorLogFile Config::getValue("errorLogFile");
            if(empty(
self::$debug))
                
self::$debug Config::getValue("debug");
            if(empty(
self::$errorEmailAddress))
            {
                
self::$errorEmailAddress Config::getValue('errorEmailAddress');
                if(empty(
self::$errorEmailAddress))
                    
self::$errorEmailAddress 'nothing';
            }
                                        
            
$this->errorTypes = array('Notice','Warning','Fatal error','Database error','Fatal database error');
                    
        } 
// End: __construct()    
        
        // methods    
        
        
private function getTraceString()
        {
            
$traceStr $this->getTraceAsString();
            
$traceStr str_replace('#',"<br />\n\r#",$traceStr);
            return 
$traceStr;
        }            
        
        private function 
errorToString()
        {    
            
$errorStr "<br />\n\r";
            
$errorStr .= "<b>" $this->errorTypes[$this->errorType] . ":</b> ";
            
$errorStr .= $this->getMessage() . ".<br />\n\r";
            if(!empty(
$this->sqlString))
                
$errorStr .= "<b>Sql:</b> " $this->sqlString "<br />\n\r";
            
$errorStr .= "<b>Source:</b> " $this->file "(" $this->line ")<br />\n\r";
            if(
self::$debug)
            {
                
$errorStr .= "<b>Backtrace:</b>";
                
$errorStr .= $this->getTraceString();
            }    
            
$errorStr .= "---------------------------<br />\n\r";                        
            
$this->errorString $errorStr;                    
        }            
        
        private function 
errorToFile()
        {
            
$errorStr '';
            if(
self::$errorNumber == 1)
                
$errorStr .= "##errorsession begins\n"
            
$errorStr .= "message: " $this->errorTypes[$this->errorType] . " -> ";
            
$errorStr .= $this->getMessage() . ".\n";
            if(!empty(
$this->sqlString))
                
$errorStr .= "sql: " $this->sqlString ".\n";
            
$errorStr .= "source: " $this->file "(" $this->line ")\n";    
            
$errorStr .= "#errornumber(" self::$errorNumber ")\n";
            
            
$this->errorString $errorStr;            
        }
        
        final public function 
display()
        {        
            if(
self::$displayErrors)
            {                    
                
$this->errorToString();                        
                echo 
$this->errorString;                
                if(
$this->errorType == || $this->errorType == 4)                
                    exit();
            }                    
        }
        
        public function 
getErrorStr()
        {
            return 
$this->errorStr;    
        }    
        
        
// destructor        
        
        
function __destruct()
        {
            if( (!
self::$displayErrors) && (!empty(self::$errorLogFile)) )
            {    
                
$this->errorToFile();                
                (
error_log($this->errorString,3,self::$errorLogFile));                
            }            
            if( (!
self::$displayErrors) && (self::$errorEmailAddress != 'nothing' && !empty(self::$errorEmailAddress)) )
            {
                
$emailMsg "A fatal error occured in the webshopsystem. Please read the errorlogfile for extra information.";
                
errorLog($emailMsg,1,self::$errorEmailAddress,"Subject:")
                        
        } 
        
    } 
// End: class - database 
extErrorHandler.php
PHP-Code:


    
function extErrorHandler($errno,$errmsg,$file,$line,$vars)
    {
        
$errorTypes = array
        (
            
1        =>    "Error",
            
2        =>    "Warning",
            
4        =>    "Parse error",
            
8        =>    "Notice",
            
16        =>    "Core Error",
            
32        =>    "Core Warning",
            
64        =>    "Compile error",
            
128        =>    "Compile warning",
            
256        =>    "User error",
            
512        =>    "User warning",
            
1024    =>    "User notice",
            
2047    =>    "All",
            
2048    =>    "Strict"
        
);
        
        
$displayErrors Config::getValue('displayErrors');
        
$errorLogFile Config::getValue('errorLogFile');
                
        
$datetime date('Y-m-d H:i:s (T)');
        
$errorType $errorTypes[$errno];
        
        if(
$displayErrors == TRUE)
        {        
            
$errorStr "<br />\n\r<b>" $errorType ":</b> " $errmsg "<br />\n\r";
            
$errorStr .= "<b>Source:</b> " $file "(" $line ")<br />\n\r";
            
$errorStr .= "---------------------------<br />\n\r";            
            echo 
$errorStr;
        }
        elseif (!empty(
$errorLogFile))
        {
            
// later 
        
}
        
    }
    
    
$oldErrorHandler set_error_handler('extErrorHandler'); 
cya khromi
khromium ist offline   Mit Zitat antworten
Alt 19.07.2004, 09:18   #5
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt
Hi khromium. Erstmal danke für Deine Hilfe, jetzt sehe ich auch bisschen besser, wie man das ganze aufteilen kann/könnte/sollte

Nur eine Frage, das kannte ich bisher noch nicht:
Code:
Config::getValue(...)
Was bewirkt das konkret?
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten
Alt 19.07.2004, 16:18   #6
Guest
 
Registriert seit: Aug 2002
Strogij hilft, wo's gehtStrogij hilft, wo's geht
Ruft eine Methode auf, ohne ein Objekt zu erzeugen.
Strogij ist offline   Mit Zitat antworten
Alt 19.07.2004, 17:31   #7
TP-Insider
 
Benutzerbild von NicNac
 
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
NicNac macht alles soweit korrekt
thx das mit dem :: wusst ich schon, aber das Config? ne eigene Klasse? Weil die steht nirgends im Quellcode deswegen dachte ich ich frage mal ob es noch zusätzlich was neues in PHP5 gibt, das ich noch nicht kenne
__________________
http://www.exploreourplanet.net - Ladet eure schönsten Urlaubsbilder hoch!
NicNac ist offline   Mit Zitat antworten
Alt 19.07.2004, 20:01   #8
TP-Senior
 
Registriert seit: Aug 2003
Ort: Kaiserslautern
khromium macht alles soweit korrekt
Nene, dass ist einfach nur meine Konfigurationsklasse, die halt wie schon gesagt wurde nicht als Objekt benutzt wird, sondern überwiegend statisch arbeitet ^^. Kannst die werte teilweise durch TRUE oder FALSE ersetzen, aber darauf kommt man auch aus dem Kontext.
khromium ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Ich hab das ERROR Chaos... Ich hab das ERROR Chaos...
« bitte um hilfe bei der suche nach so einen script? | problem mit bannerscript »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wie buche ich das? DRINGEND! der_bENn Archiv 5 01.03.2004 22:28
TP-Sponsor Programm Diskussion TobiasKa Traum-News 45 07.11.2003 21:00
Ich weiss nichtmehr weiter .. Felix Hardware 16 15.12.2002 14:37
lach mal wieder [OT-Thread] #!/usr/bin/beer Einfach so ... 23 09.11.2002 17:05


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:28 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67