DMX Steuerung Selbstbau? Teil 8 Anlegen und Verwalten einer Fehlerdatei

Alle Printausgaben sollen in eine Fehlerdatei geschrieben werden. Damit die Daten über den Webbrowser ausgelesen werden können.

Am einfachsten geht das mit einer eigenen kleinen Funktion.

void vFehlerMeldeFunktion(char *pcMeldung);

Es ist nur ein „fertiger“ Text als Paramter zugelassen. Sollen Variablen enthalten sein, muss man sie vorher mit „sprintf“ in einen Puffer schreiben. Das ist nicht schön, bei meinem kleinen Projekt aber ausreichend.

Das eigentliche Schreiben ist wirklich simpel:

  fFehler_Datei = fopen(FEHLER_DATEI_PFAD, "a");
  fprintf(fFehler_Datei,pcMeldung);
  fprintf(fFehler_Datei,"<br> \n");
  fclose(fFehler_Datei);

Die Daten werden an die Datei angehängt. Der Parameter a steht für appending.
Für die HTML Ausgabe wird gleich ein Zeilenumbruch eingefügt.

Wenn jetzt ein Fehler auftritt, der ständig gesetzt wird, wird die Datei ziemlich groß. Mit einer 20GB Log Datei kann aber keiner was anfangen. Im Normalbetrieb sollen eh keine Fehler auftreten. Deshalb ist die Größe der Datei beschränkt.

  stat(FEHLER_DATEI_PFAD,&Datei_Eigenschaften);
  //Schreibe nur wenn Datei kleiner als 60000 Byte ist.
  //Also ca. 60kb.
  if(Datei_Eigenschaften.st_size<60000)
  {

Wenn die Datei eine bestimmte Größe erreicht hat, werden die Meldungen einfach verworfen.

Über die PHP Funktion „unlink()“ kann die Datei einfach gelöscht werden.

<form action="Fehler.php" method="post">
<button type="submit" name="Refresh" value="Refresh"> Refresh</button>
<button type="submit" name="Delete" value="Delete"> Lösche Fehler Log</button>
</form>

<?php
  $Del = $_POST["Delete"];
  if($Del == 'Delete')
  {
    unlink('Config/Fehler.log');
  }

Der Aufruf erfolgt über einen „Button“ und wird über die URL an das Script übergeben. Die Daten von Knopf „Refresh“ werden einfach ignoriert. Es wird lediglich die Seite neu aufgerufen.

Dann muss nur noch die Fehlerdatei ausgegeben werden. Das geht am besten mit dem PHP Befehl „readfile()“. Da die Daten schon beim Schreiben korrekt abgelegt wurden, muss man hier nichts mehr machen. Sollte die Datei nicht existieren wird eine Kurze Meldung ausgegeben.

  $size = readfile("Config/Fehler.log");
  if($size == 0)
  {
    echo("Keine Fehler vorhanden");
  }