Archiv verlassen und diese Seite im Standarddesign anzeigen : php Fehlermeldung abfangen nachdem die Ausgabe schon gestartet ist
Hallo Leute,
ich bastele hier in phpBB2 rum und stoße auf folgendes Problem:
Heute morgen war die Datenbank weg. Klar, ist ein Problem des Hosters, passiert leider schon mal.
Aber:
phpBB2 warf mir nur einen Text entgegen, dass der Connect nicht geklappt hat oder unterbrochen wurde.
Ich habe die Stelle gefunden, die mir den (letzten, genauesten) Fehlertext entgegenwirft. Hier wollte ich eine eigene Seite bringen, so ähnlich wie es Dragonfly macht.
Wegen der ersten Fehlermeldungen in den Eingeweiden der mysql-Klasse kann ich aber nicht mit header('location... arbeiten, und die Fehlermeldungen bleiben stehen, wenn ich die eigene Seite per file einlese und ausgebe.
In der Klasse selbst würde ich ungerne rumwurschteln (keine Doku dazu gefunden)
Gibt es eine andere Möglichkeit?
so long,
BlueJay
Romanday
13-03-2007, 17:47
Ich habe die Stelle gefunden, die mir den (letzten, genauesten) Fehlertext entgegenwirft. Hier wollte ich eine eigene Seite bringen, so ähnlich wie es Dragonfly macht.
so long,
BlueJay
Das sauberste ist das über die Klasse zu regeln.
Such doch einmal in der Klasse nach dem Schlüsselwort header.
Dort könnte man doch eine Umleitung bauen.
Aber es gibt noch andere Wurschtel Möglichkeiten.:D
1.
Mit
<meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
Kannst du auf eine seperate Seite weiterleiten, auch wenn header schon
mit dem Output angefangen hat.
2.
Die Fehlermeldung ist doch sicher in einer variable gespeichert.
Dann könntest Du mit <inline> dir ein pseudo Frame um die Ausgabe der
Variable basteln.
Ob das nicht die ganze Seite auseinanderreißt weiß ich nicht.
Das sauberste ist das über die Klasse zu regeln.
Such doch einmal in der Klasse nach dem Schlüsselwort header.
Dort könnte man doch eine Umleitung bauen.
Da ist leider nix mit Header. Alles wird brav durchgereicht zum aufrufenden Modul, was die Fehlermeldung (auch) als plain/text rauswirft.
Wenn die DB den Löffel abgibt, kann das, muss aber nicht notwendigerweise mitten in der Request-Anforderung sein. Da haste nun 'nen DB-Handle (oder auch nicht, je nach Serverlaune), aber die Connection ist kurz nach Erlangen schon verreckt. Noch bevor es in die Fehler-Routine der Klasse reingeht, prangt da schon der Hilfeschrei der DB, und zwar plain/text.
Aber es gibt noch andere Wurschtel Möglichkeiten.:D
Mit
<meta http-equiv="refresh" content="5; URL=http://de.selfhtml.org/">
Kannst du auf eine seperate Seite weiterleiten,
Genau dieses Gewurschtel über 2 Seiten wollte ich eigentlich nicht :(
Aber anders scheint es wohl nicht zu gehen.
so long,
BlueJay
undefined
14-03-2007, 16:47
Wenn ich mich recht erinnere Schreibt phpbb die SQL Resource in eine Konstante. Die könnte man vorher abfragen.
Turbohummel
15-03-2007, 16:56
Die ob_-Funktionen sollten das Problem der vorzeitigen Ausgabe verhindern.
Siehe hier: http://de.php.net/manual/de/ref.outcontrol.php
Wenn ich mich recht erinnere Schreibt phpbb die SQL Resource in eine Konstante. Die könnte man vorher abfragen.
... und je nach Serverlast ist die leer (da kann man abfragen) oder sie ist besetzt, aber anschließend bricht die Abfrage ab.
Den ersten Fall hatte ich schon fast gelöst (habe doch in der Klasse rumgewurschtelt), dann hatte ich den 2.Fall (s.o.), ein schönes Ressource-Handle, aber die Verbindung war anschließend verreckt und das Handle für die Katz'! (Und das, bevor der Bildermerger scharfgeschaltet wurde :mad: )
Dann habe ich 3-4 Stellen gesehen, wo ich eingreifen müsste, und dann doch lieber hier angefragt, ob das nicht doch eleganter geht, Motto: Haste alle Daten, mach hin, sonst Fehlerseite, aber halte vorher die Klappe.
Der Abschnitt mit ob_start() und ob_flush() scheint mir dazu vielversprechend zu sein, funktioniert hoffentlich auch über include-Teile.
phpBB2 wurde nun in folgender Weise geändert:
Datei includes/db.php:
Zeile 60 bis Ende:
/// Make the database connection
ob_start(); // ab hier Output buffern
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false);
if(!$db->db_connect_id)
{
message_die(CRITICAL_ERROR, "Could not connect to the database");
// hier mein eigener Code bis Klammerende:
ob_end_clean(); // Output-Rotz himmeln
header('location: http://www.meinedomeng.de/fehlermeldungen/db_platt.htm');
die; // dann klappt es auch mit dem Header!
}
Mein Provider machte mir das Vergnügen, gerade mal wieder kurzfristig die DB absacken zu lassen, und alles lief wie vorgesehen.
so long,
BlueJay
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.