Feldnamen in einer Logdatei schreiben

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich erzeuge bei jedem Loginversuch einen Eintrag in die entsprechende Logdatei.
Das klappt auch sehr gut.
Nun möchte ich aber noch zusätzlich Feldnamen zur späteren Auswertung integrieren.
Ich weis aber nicht genau wie ich das Lösen kann.

Mit einer Datei die einmalig erzeugt wird, kann ich es.
Nicht aber mit fputs().

Hat jemand einen Tipp für mich?

PHP:
// Logdatei erstellen
 $this->entry = date("d.m.Y - H:i:s") . '; ' . $_SERVER['REMOTE_ADDR'] . '; ' . gethostbyaddr($_SERVER['REMOTE_ADDR']) . '; ' . $_SERVER['HTTP_REFERER'] . '; ' . $this->username . '; ' . $this->login_try . "\n";
$this->save = fopen($cfg['global']['script_path'] . "/_log/login.txt","a");

fputs($this->save, $this->entry);
fclose($this->save);

Gruß und Danke!
 
Wenn die Datei einmaig erzeugt wird, dann kann man das ja so machen:

PHP:
fputs($this->save, $this->header);
fputs($this->save, $this->entry);

Wenn man aber immer wieder Datensätze anhängt, dann wird ja $this->header auch immer wieder neu mit angehängt.
Also entsteht eine Textdatei in solch einem Format:

Feldname 1, Feldname 2, Feldname 3
Datensatz 1, Datensatz 2, Datensatz 3
Feldname 1, Feldname 2, Feldname 3
Datensatz 1, Datensatz 2, Datensatz 3
Feldname 1, Feldname 2, Feldname 3
Datensatz 1, Datensatz 2, Datensatz 3

Ich habs nun mal so probiert, das funktioniert auch. Aber vielleicht gibt es ja eine elegantere Lösung:

PHP:
if(!file_exists($cfg['global']['script_path'] . '/_log/login.txt') || filesize($cfg['global']['script_path'] . '/_log/login.txt') == 0){
                fputs($this->save, $this->header);
            }

Und dannach halt die Datensätze in die Datei schreiben.

Gruß
 
Kann es sein, dass fputs nur strings die mit sprintf formatiert wurden akzeptiert?

Ich glaube bei "a" (append) wird doch keine Datei neu erzgeut?!

[phpf]fputs[/phpf] arbeitet genau wie [phpf]fwrite[/phpf] laut Doku.

Ja, das stimmt:
php.net hat gesagt.:
Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
Ich habe mich vielleicht etwas komisch ausgedrückt ;)

@xtramen01:

Du willst im Prinzip nur einmal "Feldname x" da stehen haben, oder?

Ich habs nun mal so probiert, das funktioniert auch. Aber vielleicht gibt es ja eine elegantere Lösung:
Deine Lösung ist meiner Meinung nach die einfachste. Aber eigentlich brauchst du gar nicht prüfen, ob die Dateigröße 0 Byte ist, denn entweder wurde sie schon erstellt mit einem Kopf und Daten oder sie existiert noch nicht und ist leer.
 
Beim Prüfen der Größe wollte ich halt auf Nummer sicher gehen. Falls die Datei aus irgend einem Grund leer ist. Aber wenn es nach dem ginge dann müsste man vorher x Prüfungen durchführen. Haste Recht!

Danke euch!
 
Zurück