 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
17.07.2004, 00:36
|
#1
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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!
|
|
|
17.07.2004, 02:54
|
#2
|
|
Guest
Registriert seit: Aug 2002
|
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.
|
|
|
17.07.2004, 09:07
|
#3
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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!
|
|
|
18.07.2004, 13:59
|
#4
|
|
TP-Senior
Registriert seit: Aug 2003
Ort: Kaiserslautern
|
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 < 0 || $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 == 2 || $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
|
|
|
19.07.2004, 09:18
|
#5
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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!
|
|
|
19.07.2004, 16:18
|
#6
|
|
Guest
Registriert seit: Aug 2002
|
Ruft eine Methode auf, ohne ein Objekt zu erzeugen.
|
|
|
19.07.2004, 17:31
|
#7
|
|
TP-Insider
Registriert seit: Apr 2001
Ort: Zürich, Schweiz
|
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!
|
|
|
19.07.2004, 20:01
|
#8
|
|
TP-Senior
Registriert seit: Aug 2003
Ort: Kaiserslautern
|
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.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:28 Uhr.
|
 |