W3docs

fgetc()

Die PHP-Funktion fgetc() liest ein einzelnes Zeichen aus einem Datei-Pointer und ist unverzichtbar für Entwickler und Serveradministratoren.

Einführung in die PHP-Funktion fgetc()

Die Funktion fgetc() in PHP liest genau ein Zeichen aus einer geöffneten Datei und setzt den Datei-Pointer um ein Byte weiter. Der Name steht für „file get character" (Zeichen aus Datei lesen). Jeder Aufruf gibt das nächste Zeichen zurück, sodass Sie durch wiederholtes Aufrufen eine Datei zeichenweise durchlaufen können.

Sie greifen auf fgetc() zurück, wenn Sie eine feingranulare, zeichenweise Kontrolle benötigen — zum Beispiel beim Aufbau eines einfachen Parsers, beim Zählen bestimmter Zeichen oder wenn Sie die Verarbeitung beim Erreichen eines bestimmten Bytes stoppen möchten. Für den üblichen Datei-Lesealltag sind zeilenbasiertes fgets() oder ganzdateibasiertes fread()/file_get_contents() schneller und einfacher, da jeder fgetc()-Aufruf einen Funktionsaufruf-Overhead verursacht. Zu wissen, wann man es nicht einsetzt, ist genauso wichtig wie zu wissen, wie man es benutzt.

Diese Seite behandelt die Syntax, Parameter, Rückgabewerte, ausführbare Beispiele und häufige Fallstricke (insbesondere die "0"-EOF-Falle).

Syntax

fgetc(resource $stream): string|false

Die Funktion nimmt ein einzelnes Argument entgegen und gibt entweder das gelesene Zeichen oder false zurück.

Parameter

ParameterErforderlichBeschreibung
$streamJaEin geöffneter Datei-Pointer. Er muss eine gültige Ressource sein, die von fopen(), fsockopen(), popen() oder einer ähnlichen Funktion zurückgegeben wurde — kein Dateiname.

Der Typ resource wird in PHP 8+ vollständig unterstützt. Für moderne Kompatibilität sind keine Änderungen erforderlich.

Rückgabewerte

  • Bei Erfolg wird ein string zurückgegeben, der ein einzelnes Zeichen aus der Datei enthält.
  • Gibt false zurück, wenn das Dateiende (EOF) erreicht ist oder ein Fehler auftritt.

Beispiele

Beispiel 1: Ein einzelnes Zeichen aus einer Datei lesen

Dies liest nur das erste Zeichen der Datei. Prüfen Sie immer, ob fopen() erfolgreich war, bevor Sie das Handle verwenden, und schließen Sie die Datei mit fclose(), wenn Sie fertig sind.

<?php

$fileHandle = fopen('example.txt', 'r');
if ($fileHandle) {
    echo fgetc($fileHandle); // prints the first character
    fclose($fileHandle);
}

Beispiel 2: Eine ganze Datei zeichenweise lesen

Um die gesamte Datei zu lesen, rufen Sie fgetc() in einer Schleife auf und stoppen, wenn es false (EOF) zurückgibt.

<?php

$fileHandle = fopen('example.txt', 'r');
if ($fileHandle) {
    while (($char = fgetc($fileHandle)) !== false) {
        echo $char;
    }
    fclose($fileHandle);
}

Dies gibt jedes Zeichen der Datei bis zum EOF aus.

Warum !== false wichtig ist (die „0"-Falle)

Ein sehr häufiger Fehler ist das Schreiben der Schleife mit einem lockeren Vergleich:

// BUGGED: stops early on the first "0" or "" it reads
while ($char = fgetc($fileHandle)) {
    echo $char;
}

PHP behandelt die Strings "0" und "" als falsy. Wenn Ihre Datei ein 0-Zeichen enthält, endet diese Schleife dort statt beim EOF. Verwenden Sie immer den strikten Identitätsvergleich !== false, sodass nur der echte EOF-Wert die Schleife beendet. Dieselbe Regel gilt für fgets() und fread().

Beispiel 3: Vorkommen eines Zeichens zählen

Da fgetc() Ihnen jeweils ein Zeichen liefert, eignet es sich gut für das zeichenweise Zählen, ohne die gesamte Datei in den Speicher zu laden:

<?php

$fileHandle = fopen('example.txt', 'r');
$vowels = 0;
if ($fileHandle) {
    while (($char = fgetc($fileHandle)) !== false) {
        if (str_contains('aeiouAEIOU', $char)) {
            $vowels++;
        }
    }
    fclose($fileHandle);
    echo "Vowels: $vowels";
}

fgetc() vs. fgets() vs. fread()

FunktionLiestVerwenden wenn
fgetc()Ein ZeichenSie zeichengenaue Kontrolle benötigen oder bei einem bestimmten Byte stoppen möchten
fgets()Eine Zeile (bis zu einem Zeilenumbruch)Sie Text zeilenweise verarbeiten
fread()Eine feste Anzahl von BytesSie Binärdaten oder große Datenblöcke auf einmal lesen

Für Binärdateien bevorzugen Sie fread() — eine Schleife mit fgetc() funktioniert, ist aber pro Byte deutlich langsamer.

Hinweise und Fallstricke

  • fgetc() funktioniert auf binärsicheren Streams: Es gibt ein Byte zurück, auch bei Nicht-Text-Zeichen. Mehrbyte-UTF-8-Zeichen umfassen mehrere Bytes, sodass ein einzelner fgetc()-Aufruf möglicherweise nur einen Teil eines solchen Zeichens zurückgibt.
  • Öffnen Sie die Datei mit dem richtigen Modus ('r', 'rb' usw.) über fopen(), und vergessen Sie nicht, sie mit fclose() zu schließen.
  • Sie können das Dateiende auch explizit mit feof() prüfen, obwohl der Vergleich von fgetc() mit false in der Regel ausreichend ist.

Fazit

fgetc() liest jeweils ein Zeichen aus einem geöffneten Datei-Pointer und gibt false am Dateiende zurück, was es ideal für zeichengenaues Parsen und Zählen macht. Denken Sie an die zwei wesentlichen Punkte: Übergeben Sie eine geöffnete Ressource von fopen(), und beenden Sie Ihre Leseschleife mit dem strikten !== false-Check, damit ein buchstäbliches 0 die Schleife nicht vorzeitig stoppt. Für zeilen- oder blockbasierte Arbeit greifen Sie stattdessen auf fgets() oder fread() zurück.

Weitere Informationen zur Arbeit mit Dateien in PHP finden Sie im PHP-Leitfaden zur Dateiverarbeitung.

Übungen

Übung
Welche Funktion hat die PHP-Funktion fgetc()?
Welche Funktion hat die PHP-Funktion fgetc()?
Was this page helpful?