PHP-Web-Stat Support Forum
https://www.php-web-statistik.de/cgi-bin/yabb/YaBB.pl
Allgemein >> Dokumentationen >> Doku Logdatei-Reparatur
https://www.php-web-statistik.de/cgi-bin/yabb/YaBB.pl?num=1282855592

Beitrag begonnen von hr3 am 26.08.10 um 22:46:30

Titel: Doku Logdatei-Reparatur
Beitrag von hr3 am 26.08.10 um 22:46:30
Werden beim Prüflauf Fehler festgestellt, wird die Anzahl und in der grauen Zeile darunter die entsprechende(n) Satz-Nummer(n) angezeigt. In diesem Fall wird die Auswahl Reparieren angeboten. Dabei werden alle Fehler korrigiert und die Sätze in die Zwischendatei log/logdb_temp.dta geschrieben. Anschließende werden die Daten wieder in die Originaldatei kopiert. Sollte das Programm bei der Reparatur abbrechen, kann somit anhand der Zwischendatei festgestellt werden, wie weit die Verarbeitung problemlos gelaufen ist und mittels der Originaldatei, welche Daten dieser Stelle folgen und ggf. den Abbruch ausgelöst haben.

Titel: Re: Doku Logdatei-Reparatur
Beitrag von hr3 am 28.08.10 um 09:53:58
Für alle, die noch keine Profis in der PHP-Programmierung sind.

Auslöser für den Abbruch kann bei großen Datenvolumen (z.B. mehrere Millionen Sätze in der logdb_backup.dta) das Überschreiten von Max Execution Time bzw. in anderen Programmen auch Memory Limit sein.

Häufig sind die Error-Values für diese Zwecke ungünstig eingestellt und als Ergebnis sieht man nur eine leere Seite. Da auf den meisten externen Servern die Protokolldateien nicht öffentlich zugängig sind, ist die Ursache oft schwer erkennbar. Dann in fremden Programmstrukturen die Gründe und die richtigen Maßnahmen zu finden ist nicht einfach.

Eine erste einfache Hilfe kann die Ausgabe von Statusinformationen bei Schleifen-Verarbeitungen sein.

Eine wenig aufwendige Variante: jede Sekunde eine Meldung senden.
if(time()>=$x) {$x=time()+1; echo date('Y-m-d H:i:s').'<br>'; @flush();}

Oder etwas rechenintensiver: jede Sekunde den aktuellen Durchlaufzähler ausgeben
$i++; if(time()>=$x) {$x=time()+1; echo date('Y-m-d H:i:s ').$i.'<br>'; @flush();}

Zusätzlich kann wenn erforderlich mit memory_get_usage() die Größe des momentan verwendeten Speichers angezeigt werden.

Durch z.B. $x=time()+1; wird der Zeitintervall von einer Sekunde angegeben. Eventuell sind auch größere Abstände sinnvoll.

Häufiger als jede Sekunde sollte nichts ausgegeben werden, da sonst die Performance erheblich eingeschränkt wird und es ggf. auch Schwierigkeiten mit der Anzeige geben kann.

Konkretes Beispiel für repair.php
[code]...
      while ( !FEOF ( $logfile ) )
       {
$i++; if(time()>=$x) {$x=time()+5; echo date('Y-m-d H:i:s ').$i.'<br>'; @flush();}
        //------------------------------------------------------------------------------
        $logfile_entry = fgetcsv ( $logfile , 6000 , "|" );
...[/code]
Außerdem kann es sinnvoll sein, das Programm nicht über das Menü im Fenster sonder als Direktaufruf .../config/repair.php auszuführen.

Titel: Re: Doku Logdatei-Reparatur
Beitrag von hr3 am 28.08.10 um 10:12:59
Eine Maßnahme bei zu großen Dateien kann sein, diese mittels Editor in 2 oder mehr Teile (auf Satzgrenzen achten) zu zerlegen, zu prüfen (ggf. korrigieren) und wenn Fehler festgestellt und bereinigt wurden die Ergebnisse wieder zusammen zu fügen. Sonst kann die Originaldatei zurückkopiert werden.

Titel: Re: Doku Logdatei-Reparatur
Beitrag von hr3 am 29.09.10 um 20:38:14
Ein Fehler pro Datei ist bei einigen Dateien beim ersten Lauf dieser Routine normal und ohne Bedeutung. Bereits beim Anlegen wurde dort eine nicht notwendige Zeilenschaltung hinterlegt.

Titel: Re: Doku Logdatei-Reparatur
Beitrag von hr3 am 29.09.10 um 21:17:53
Wenn viele fehlerhafte Sätze gefunden werden, kann es sein, dass der Button Reparieren durch den unteren Rand des Fensters verdeckt und damit unsichtbar ist. Wenn durch scrollen oder ziehen dieser Bereich nicht sichtbar gemacht werden kann, besteht auch die Möglichkeit diese Funktion über http://.../stat/config/repair.php direkt (ohne Fenster) aufzurufen.

Titel: Re: Doku Logdatei-Reparatur
Beitrag von hr3 am 29.09.10 um 21:46:38
Empfohlener Ablauf für die Logdatei Reparatur:
  • ggf. Werte der Statistik-Übersicht dokumentieren (Hardcopy)
  • Wartungsmodus aktivieren
  • ggf. Verzeichnis log/ sichern
  • Logdatei-Reparatur durchführen
    Wenn nicht alle Fehler bereinigt wurden, für diese Datei solange wiederholen, bis keine Fehler mehr vorhanden sind, bzw. sich die Anzahl der Fehler nicht mehr verändert.
  • Statistik wieder aktivieren
  • Cache und Index neu erstellen
  • ggf. Werte der Statistik-Übersicht überprüfen



Wenn das Problem und dieser Lösungsansatz über das Forum kommuniziert wurden, unbedingt den Status zurück melden.
  • Wieviele Fehler wurden in welcher Datei erkannt und wieviele konnten ggf. nicht bereinigt werden?
  • Wurde der Neuaufbau für Counter und Index korrekt beendet?
  • Besteht das ursprüngliche Problem noch?

PHP-Web-Stat Support Forum » Powered by YaBB 2.5.2!
YaBB Forum Software © 2000-2012. Alle Rechte vorbehalten.