Anzeige:
Ergebnis 1 bis 7 von 7

Thema: php Fehlermeldung abfangen nachdem die Ausgabe schon gestartet ist

  1. #1
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    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
    Eigentlich ganz einfach, wenn man's weiss!

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von BlueJay Beitrag anzeigen

    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.
    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.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von Romanday Beitrag anzeigen
    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.
    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
    Eigentlich ganz einfach, wenn man's weiss!

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Wenn ich mich recht erinnere Schreibt phpbb die SQL Resource in eine Konstante. Die könnte man vorher abfragen.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Die ob_-Funktionen sollten das Problem der vorzeitigen Ausgabe verhindern.

    Siehe hier: http://de.php.net/manual/de/ref.outcontrol.php
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  6. #6
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von undefined Beitrag anzeigen
    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 )

    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.
    Geändert von BlueJay (16-03-2007 um 08:20 Uhr) Grund: Zusammenfassung 2er Antworten
    Eigentlich ganz einfach, wenn man's weiss!

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    Lösung:

    phpBB2 wurde nun in folgender Weise geändert:

    Datei includes/db.php:
    Zeile 60 bis Ende:

    PHP-Code:
    /// Make the database connection
    ob_start(); // ab hier Output buffern
    $db = new sql_db($dbhost$dbuser$dbpasswd$dbnamefalse);

    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
    Eigentlich ganz einfach, wenn man's weiss!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •