we:DevEdge

the webEdition code base

Tutorials

Administration

ErrorLog anzeigen und löschen

Autor: Dirk Einecke (we:DevEdge / appsolute GmbH) / Kommentare (0)
Geschrieben am 20.08.2006 um 14:00 Uhr / Letzte Änderung am 20.08.2006 um 15:39 Uhr

webEdition Systemvoraussetzungen:
webEdition-Basisversion


Inhaltsverzeichnis

  1. Über dieses Dokument
  2. Protokoll der PHP-Fehler
  3. Anzeigen und löschen über phpMyAdmin
  4. Anzeigen und löschen über eine eigene Funktion
  5. Screenshots
  6. Schlussbemerkung

1. Über dieses Dokument

Dieses Tutorial beschreibt, wie man das Protokoll der PHP-Fehler anzeigen und löschen kann.

2. Protokoll der PHP-Fehler

Bei der Erstellung einer Website mit dem webEdition CMS kann es sehr hilfreich sein, wenn man sich alle PHP-Fehler über die webEdition-Fehlerbehandlung mitprotokolliert. Die Fehlerbehandlung aktivieren Sie wie folgt:
  1. Wählen Sie aus dem webEdition-Menü den Eintrag "Optionen" » "Einstellungen...".
  2. Klicken Sie auf den "Fehlerbehandlung"-Tab
  3. Aktivieren Sie hier folgende Checkboxen:
    • webEdition Fehlerbehandlung aktivieren
    • Fehler
    • Warnungen
    • Hinweise
    • Fehler protokollieren
  4. Bestätigen Sie Ihre Einstellungen durch einen Klick auf den "Speichern"-Button.
Das Protokoll aller PHP-Fehler wird nun in der Datenbanktabelle "tblErrorLog" erstellt. Hierbei werden folgende Daten gespeichert:
Innerhalb des webEdition CMS gibt es keine Möglichkeit, sich dieses Protokoll anzeigen zu lassen oder es zu löschen. Aus diesem Grund werden im Folgenden zwei Wege dafür beschrieben.

3. Anzeigen und löschen über phpMyAdmin

Der wohl bequemste Weg, sich das Protokoll der PHP-Fehler anzeigen zu lassen bzw. es zu löschen ist das Datenbankverwaltungssystem phpMyAdmin, welches die meisten Provider bei ihren Accounts zur Verfügung stellen.

Für eine Anzeige des Protokolls gehen Sie wie folgt vor:
  1. Öffnen Sie phpMyAdmin.
  2. Wählen Sie die Datenbank aus, welche Sie für Ihre Installation des webEdition CMS nutzen.
  3. Sie sollten nun im linken Frame alle Tabellen der Datenbank aufgelistet sehen.
  4. Klicken Sie auf den Link für die Tabelle "tblErrorLog".
  5. Auf der rechten Seite wird Ihnen nun die Struktur dieser Tabelle angezeigt. Klicken Sie auf den Reiter "Anzeigen" im oberen Bereich der Seite. Sollte dieser Reiter deaktiviert sein, dann ist die Tabelle leer und es wurden keine PHP-Fehler protokolliert und Sie können den nächsten Schritt nicht durchführen.
  6. Es wird nun eine Übersicht alle PHP-Fehler angezeigt.
Für das Löschen des Protokolls gehen Sie wie folgt vor:
  1. Öffnen Sie phpMyAdmin.
  2. Wählen Sie die Datenbank aus, welche Sie für die Installation des webEdition CMS nutzen.
  3. Sie sollten nun im linken Frame alle Tabellen der Datenbank aufgelistet sehen.
  4. Klicken Sie auf den Link für die Tabelle "tblErrorLog".
  5. Klicken Sie auf den Reiter "Leeren". Sollte dieser Reiter deaktiviert sein, dann ist die Tabelle bereits leer und es wurden keine PHP-Fehler protokolliert und Sie brauchen die nächsten Schritte nicht durchzuführen.
  6. Sie werden nun gefragt, ob die Anfrage wirklich durchführen möchten. Bestätigen Sie diese Frage mit "OK".
  7. Im oberen Bereich wird Ihre Aktion wie folgt bestätigt: "Die Tabelle tblErrorLog wurde geleert."

4. Anzeigen und löschen über eine eigene Funktion

Sollten Sie kein phpMyAdmin zu Verfügung haben oder möchten Sie dieses Datenbankverwaltungssystem einfach nur nicht nutzen, dann können Sie sich auch eine kleine eigene Administrationsoberfläche für diese eine Datenbanktabelle erstellen. Gehen Sie dazu wie folgt vor:
  1. Legen Sie über Datei -> Neu -> Vorlage eine neue Vorlage an.
  2. Geben Sie dieser neuen Vorlage den Dateinamen "tblErrorLog" (die Endung .tmpl wird durch das webEdition CMS automatisch hinzugefügt).
  3. Speichern Sie die Vorlage durch einen Klick auf den "Speichern"-Button.
  4. Wechseln Sie durch einen Klick auf den "Bearbeiten"-Tab in die "Bearbeiten"-Ansicht.
  5. Löschen Sie den vorgegebenen Quelltext und fügen folgenden Quelltext ein.

    <?php
      function showErrorLog()
      {
        $counter = (int) 0;
        $a_data = array();
        $GLOBALS['DB_WE']->query('SELECT * FROM '.ERROR_LOG_TABLE.' ORDER BY ID DESC');
        while($GLOBALS['DB_WE']->next_record())
        {
          $a_data[$counter]['ID'] = (int) $GLOBALS['DB_WE']->f('ID');
          $a_data[$counter]['Text'] = (string) $GLOBALS['DB_WE']->f('Text');
          $a_data[$counter]['Date'] = (int) $GLOBALS['DB_WE']->f('Date');
          $counter++;
        }

        $tableHead = (string) '';
        $tableHead .= '<tr>';
        $tableHead .= '<th>ID</th>';
        $tableHead .= '<th>Text</th>';
        $tableHead .= '<th>Datei</th>';
        $tableHead .= '<th>Datum</th>';
        $tableHead .= '</tr>';

        $tableBody = (string) '';
        if(count($a_data) > 0)
        {
          $str_pattern = '/Script name: (?P<file>.*), Line number: (?P<line>[0-9]*)/';
          foreach($a_data as $key => $value)
          {
            preg_match($str_pattern, $value['Text'], $arr_matches);
            $str_path = $_SERVER['DOCUMENT_ROOT'].$arr_matches['file'];
            $tableBody .= '<tr>';
            $tableBody .= '<td>'.$value['ID'].'</td>';
            $tableBody .= '<td>'.$value['Text'].'</td>';
            if(file_exists($str_path) && is_readable($str_path))
            {
              $str_href = (string) $_SERVER['PHP_SELF'];
              $str_href .= '?error='.rawurlencode($value['Text']);
              $str_href .= '&amp;file='.$arr_matches['file'];
              $str_href .= '&amp;line='.$arr_matches['line'];
              $str_href .= '#line'.$arr_matches['line'];
              $tableBody .= '<td><a href="'.$str_href.'" target="_blank">anzeigen</a></td>';
            }
            else
            {
              $tableBody .= '<td>&nbsp;</td>';
            }
            $tableBody .= '<td>'.date('d.m.Y H:i:s', $value['Date']).'</td>';
            $tableBody .= '</tr>';
          }
        }
        else
        {
          $tableBody .= '<tr>';
          $tableBody .= '<td colspan="4">Die Tabelle \''.ERROR_LOG_TABLE.'\' ist leer.</td>';
          $tableBody .= '</tr>';
        }

        return '<table border="1">'.$tableHead.$tableBody.'</table>';
      }

      function showError()
      {
        $str_content = file_get_contents($_SERVER['DOCUMENT_ROOT'].$_GET['file']);
        $str_content = highlight_string($str_content, true);
        $str_content = str_replace("\n", '', $str_content);
        $arr_content = explode('<br />', $str_content);

        $str_out = (string) '<h2>Datei: '.$_GET['file'].'</h2>';
        $str_out .= '<table>';
        foreach($arr_content as $i_line => $str_line)
        {
          $i_line_number = (int) $i_line+1;

          $str_tr_style = '';
          if(is_int($i_line_number/2))
          {
            $str_tr_style = ' style="background: #F9F9F9;"';
          }

          $str_td_style = '';
          if($i_line_number == $_GET['line'])
          {
            $str_td_style = ' style="border-top: 1px solid #FF0000;"';
          }

          $str_out .= '<tr id="line'.$i_line_number.'"'.$str_tr_style.'>';
          $str_out .= '<td'.$str_td_style.'>'.$i_line_number.'&nbsp;&nbsp;&nbsp;&nbsp;</td>';
          $str_out .= '<td'.$str_td_style.'>'.$str_line.'</td>';
          $str_out .= '</tr>';

          if($i_line_number == $_GET['line'])
          {
            $str_out .= '<tr>';
            $str_out .= '<td colspan="2" class="error">'.$_GET['error'].'</td>';
            $str_out .= '</tr>';
          }
        }
        $str_out .= '</table>';

        return $str_out;
      }

      function truncateTblErrorLog()
      {
        $GLOBALS['DB_WE']->query('TRUNCATE TABLE '.ERROR_LOG_TABLE);
      }

      if(!empty($_GET['truncate']))
      {
        truncateTblErrorLog();
        header('Location: '.strip_tags($_SERVER['PHP_SELF']));
      }
    ?>

    <?xml version="1.0" encoding="iso-8859-15"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

    <head xml:lang="de" lang="de">
      <we:title>Error-Log anzeigen und löschen</we:title>
      <we:description />
      <we:keywords />
      <we:charset defined="ISO-8859-15">ISO-8859-15</we:charset>
      <style>
        body {
          font-size: 11px;
          font-family: Monaco, 'Courier New', Courier, mono;
        }

        table {
          border-collapse: collapse;
          border-spacing: 0;
          border: 1px solid #000000;
        }

        th {
          font-weight: bold;
        }

        th, td {
          vertical-align: top;
          text-align: left;
          padding: 2px;
          font-size: 11px;
          font-family: Monaco, 'Courier New', Courier, mono;
        }

        .error {
          background: #FF0000;
          color: #FFFFFF;
        }

        .error * {
          color: #FFFFFF;
        }
      </style>
    </head>

    <body onload="scrollIt()">
      <h1>Error-Log anzeigen und löschen</h1>

      <?php if(empty($_GET['error']) && empty($_GET['file']) && empty($_GET['line'])): ?>

        <h2>Error-Log anzeigen</h2>
        <?php echo showErrorLog(); ?>

        <h2>Error-Log löschen</h2>
        <p>
          <?php $str_path = strip_tags($_SERVER['PHP_SELF']).'?truncate=1'; ?>
          <a href="<?php echo $str_path; ?>">Tabelle '<?php echo ERROR_LOG_TABLE; ?>' leeren</a>
        </p>

      <?php endif; ?>

      <?php
        if(!empty($_GET['error']) && !empty($_GET['file']) && !empty($_GET['line']))
        {
          echo showError();
        }
      ?>

      <script type="text/javascript">
        function scrollIt()
        {
          window.scrollBy(0, -100);
        }
      </script>
    </body>
    </html>

  6. Speichern Sie die Vorlage durch einen Klick auf den "Speichern"-Button.
  7. Legen Sie nun auf Grundlage dieser eben erstellten Vorlage ein webEdition-Dokument an. Gehen Sie dabei wie folgt vor:
    1. Datei -> Neu -> webEdition Seite -> Leere Seite
    2. Wechseln Sie durch einen Klick auf den "Eigenschaften"-Tab auf die "Eigenschaften"-Seite.
    3. Geben Sie als Dateiname "tblErrorLog" ein.
    4. Wählen Sie als Dateierweiterung ".php" aus der Select-Box aus.
    5. Wählen Sie als Vorlage "tblErrorLog.tmpl" aus.
    6. Aktivieren Sie die "Seite dynamisch generieren"-Checkbox.
    7. Aktivieren Sie die "Beim Speichern veröffentlichen"-Checkbox.
    8. Speichern Sie das webEdition-Dokument durch einen Klick auf den "Speichern"-Button.
  8. Rufen Sie nun das eben erstellte webEdition-Dokument mit Ihrem Browser außerhalb des webEdition CMS auf. Sie sehen auf dieser Seite im oberen Bereich eine Übersicht über das Protokoll der PHP-Fehler. Im unteren Bereich der Seite finden Sie einen Link "Tabelle 'tblErrorLog' leeren". Durch einen Klick auf diesen Link wird das Protokoll gelöscht.

5. Screenshots

Abbildung 1 - ErrorLog anzeigen
Abbildung 1 - ErrorLog anzeigen

Abbildung 2 - Error anzeigen
Abbildung 2 - Error anzeigen

6. Schlussbemerkung

Da dieses Protokoll der PHP-Fehler nur den Betreiber einer Website zugänglich sein sollte und er allein auch entscheiden sollte, ob und wann dieses Protokoll gelöscht wird, sollten Sie das eben erstellt webEdition-Dokument nur dann veröffentlichen, wenn Sie es auch wirklich benötigen. Die restliche Zeit sollten Sie es unveröffentlicht lassen. Als Alternative können Sie natürlich auch mit Hilfe des <we:ifRegisteredUser>-Tags eine Zugriffsbeschränkung in dieses webEdition-Dokument einbauen. Hierfür ist dann aber das webEdition CMS Modul "Kundenverwaltung PRO" erforderlich.

Kommentare (0)

Kommentar hinzufügen
Um selber einen Kommentar schreiben zu können müssen Sie sich registrieren und einloggen.