Dateioperationen: Lesen und Schreiben

Um auf eine Datei zugreifen zu können (egal ob sie gelegen oder erstellt werden soll), muss zunächst ein Zeiger (Filepointer) gesetzt werden:

// Datei oeffnen
if($fp = fopen("datei.txt", "r")) {
  while(!feof($fp)) {
    $zeile = fgets($fp, 8192);
    ...$zeile verarbeiten
  }
} else {
  echo "Konnte Datei nicht öffnen";
}

Der zweite Parameter in fopen() gibt den Modus an, in welchem die Datei behandelt werden soll:

Wert Beschreibung
r öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei
r+ Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.
w Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.
w+ Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
a Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.
a+ Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei. Wenn die Datei nicht existiert, wird versucht sie anzulegen.

Um die Datei explizit als Binär-Datei zu behandeln, muss (unter Windows) der Buchstabe "b" im Modus hinzugefügt werden.

fgets($fp, $max) liest maximal $max Zeichen oder bricht früher ab, wenn es vorher auf einen Zeilenumbruch oder das Dateiende stößt. Letzteres kann per feof($fp) abgefragt werden und eigent sich hervorragend als Abbruchkriterium einer while-Schleife. Das gegenstück zu fgets() ist fputs()

Eine Besonderheit bietet fopen(): wenn statt einer lokalen Datei eine URL übergeben wird, wird von dieser gelesen. Damit können beispielsweise Newsinhalte von fremden Sites ausgewertet werden.