# 5.5.2 Dateien lesen und schreiben (SPL)

Im Unterkapitel Dateien lesen und schreiben wurde anhand eines kleinen Beispiels gezeigt, wie Daten mit PHP-Funktionen in eine Textdatei geschrieben werden können.

Hier möchten wir die fertige Klasse SplFileObject der "Standard PHP Library (SPL)" nutzen. Dies hat den Vorteil, dass alle Methoden der Klasse genutzt werden können.

Hier verwenden wir nur eine kleine Auswahl der vorhandenen Methoden:

- Beim Instanzieren die Klasse SplFileObject wird der Pfad und Dateiname an den Konstruktor übergeben. Ebenso wird der Modus w (= write file) bzw. r (= read file) mitgegeben.
- Die Methode fwrite() wird zum Schreiben des Inhalts in die Datei genutzt.
- Die Methode ftruncate() wird dazu genutzt, um Zeichen aus dem String zu entfernen.
- Die Methode getRealPath() liest den Speicherort und den Dateinamen aus.
- Die Methode eof() wird verwendet um das Dateiende (End-of-File = eof) zu finden.
- Die Methode fgets() liest Daten aus der Datei zeilenweise aus.

Hier ein einfaches Beispiel zum Schreiben und Lesen einer Textdatei. Probieren Sie das Beispiel aus. Es funktioniert so wie es ist. Dies bedeutet auch, dass SPL-Klassen nicht importiert werden müssen, sondern einfach so funktionieren (anders als beispielsweise bei Python).

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    $textIn = "Dies ist ein Beispiel-Text.\nZweite Zeile";

    // $file-Objekt zum Schreiben erzeugen
    $fileWrite = new SplFileObject("media/a.txt", "w");

    // Text in Datei schreiben (normalerweise Text aus einem Formular)
    $fileWrite->fwrite($textIn);

    // Objekt löschen, wenn alles geschrieben wurde
    $fileWrite = null;

    // $file-Objekt zum Lesen erzeugen
    $fileRead = new SplFileObject("media/a.txt", "r");

    // Beispiel: Die ersten 9 Zeichen in der ersten Zeile löschen
    $fileRead->ftruncate(9);

    // Dateipfad und Dateiname ausgeben
    echo $fileRead->getRealPath() . "<br>";

    // Alle Zeilen bis End-of-File = eof() ausgeben
    while (!$fileRead->eof()) {
        echo $fileRead->fgets() . "<br>";
    }

Ausgabe:
C:...mein..Pfad...\media\a.txt
Dies ist ein Beispiel-Text.
Zweite Zeile

Damit haben Sie eine gute Alternative zu den "normalen" PHP-Funktionen.

Hinweis

Bitte beachten Sie, dass zum besseren Verständnis hier das Error-Handling weggelassen wurde. Da es aber aus verschiedensten Gründen sein kann, dass eine Datei nicht geschrieben oder gelesen werden kann, ist ein Error-Handling an dieser Stelle besonders wichtig.