fgetcsv

(PHP 4, PHP 5, PHP 7, PHP 8)

fgetcsv Liest eine Zeile von der Position des Dateizeigers und prüft diese auf kommaseparierte Werte (CSV)

Beschreibung

fgetcsv(
    resource $stream,
    ?int $length = null,
    string $separator = ",",
    string $enclosure = "\"",
    string $escape = "\\"
): array|false

Die Funktion fgetcsv() ist ähnlich der Funktion fgets(), nur dass fgetcsv() die eingelesene Zeile auf Felder im CSV-Format (kommaseparierte Felder) hin überprüft und ein Array mit den gelesenen Feldern zurückgibt.

Hinweis: Die Spracheinstellung (Locale) wird von dieser Funktion beachtet. Beispielsweise können Daten, die in bestimmten Ein-Byte-Kodierungen kodiert sind, falsch interpretiert werden, wenn LC_CTYPE den Wert en_US.UTF-8 hat.

Parameter-Liste

stream

Ein gültiger Dateizeiger auf eine Datei, die zuvor mit fopen(), popen() oder fsockopen() geöffnet wurde.

length

Muss größer als die längste Zeile (in Zeichen) sein, die in der CSV-Datei zu finden ist (dies erlaubt die Erkennung abschließender Zeilenende-Zeichen). Andernfalls wird die Zeile in Blöcke von length Zeichen aufgeteilt, es sei denn, die Aufteilung würde innerhalb einer Feldbegrenzung erfolgen.

Wird dieser Paramter ausgelassen (oder in PHP 8.0.0 oder später auf 0 oder null gesetzt), ist die maximale Zeilenlänge nicht begrenzt, was ein wenig langsamer ist.

separator

Der Parameter separator setzt das Feld-Trennzeichen. Es muss ein Single-Byte-Zeichen sein.

enclosure

Der Parameter enclosure setzt das Feld-Begrenzungszeichen. Es muss ein Single-Byte-Zeichen sein.

escape

Der Parameter escape setzt das Maskierungs-Zeichen. Es muss ein Single-Byte-Zeichen oder die leere Zeichenkette sein. Die leere Zeichenkette ("") deaktiviert den proprietären Maskierungsmechanismus.

Warnung

Im Eingabe Stream kann das enclosure-Zeichen immer maskiert werden, indem es innerhalb einer in Anführungszeichen gesetzten Zeichenkette verdoppelt wird, was zu einem einzelnen enclosure-Zeichen im geparsten Ergebnis führt. Das escape-Zeichen funktioniert anders: wenn eine Sequenz aus escape- und enclosure-Zeichen in der Eingabe erscheint, werden beide Zeichen im geparsten Ergebnis vorhanden sein. Für die Standardparameter wird also eine CSV-Zeile wie "a""b","c\"d" die Felder als a"b und c\"d parsen.

Warnung

Seit PHP 8.4.0 ist es veraltet, sich auf den Standardwert von escape zu verlassen. Er muss explizit angegeben werden, entweder an der richtigen Stelle oder durch die Verwendung von benannten Argumenten.

Warnung

Wenn escape auf etwas anderes als eine leere Zeichenkette ("") gesetzt wird, kann dies zu einer CSV-Datei führen, die nicht mit » RFC 4180 konform ist oder die den Umlauf durch die PHP-CSV-Funktionen nicht übersteht. Der Standardwert für escape ist "\\", weshalb empfohlen wird, diesen Parameter explizit auf eine leere Zeichenkette zu setzen. Der Standardwert wird sich in einer zukünftigen Version von PHP ändern, jedoch nicht vor PHP 9.0.

Rückgabewerte

Gibt bei Erfolg ein numerisch indexiertes Array zurück, das die gelesenen Felder enthält. Bei einem Fehler wird false zurückgegeben.

Hinweis:

Ein leere Zeile in einer CSV-Datei wird als ein Array zurückgegeben, das ein einzelnes null-Feld enthält, und wird nicht als Fehler behandelt.

Hinweis: Wenn PHP Zeilenendezeichen nicht richtig erkennt, entweder beim Lesen von Dateien auf einem Macintosh oder bei Dateien, die auf einem Macintosh erstellt wurden, kann die Option auto_detect_line_endings aktiviert werden.

Fehler/Exceptions

Wenn separator oder enclosure nicht ein Byte lang ist, wird ein ValueError geworfen.

Wenn escape nicht ein Byte lang oder eine leere Zeichenkette ist, wird ein ValueError geworfen.

Changelog

Version Beschreibung
8.4.0 Sich auf den Standardwert von escape zu verlassen, ist nun veraltet.
8.3.0 Eine leere Zeichenkette wird anstelle einer Zeichenkette mit einem einzelnen Null-Byte für das letzte Feld zurückgegeben, wenn es nur einen nicht abgeschlossenen Feld-Begrenzer enthält.
8.0.0 length ist jetzt nullbar.
7.4.0 Der Parameter escape akzeptiert nun auch eine leere Zeichenkette, um den proprietären Maskierungsmechanismus zu deaktivieren.

Beispiele

Beispiel #1 Lesen und Ausgeben des gesamten Inhalts einer CSV-Datei

<?php
$row
= 1;
if ((
$handle = fopen("test.csv", "r")) !== FALSE) {
while ((
$data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo
"<p> $num Felder in Zeile $row: <br /></p>\n";
$row++;
for (
$c=0; $c < $num; $c++) {
echo
$data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>

Siehe auch