fputcsv

fputcsv($stream, $fields, $separator, $enclosure, $escape)

Schreibt die Werte eines Arrays als eine CSV-Zeile und gibt die Länge der geschriebenen Zeile zurück, bei einem Fehler false. Werte mit dem Trennzeichen, Anführungszeichen oder einem Zeilenumbruch setzt sie automatisch in Anführungszeichen.

Parameter

  • $stream – ein Handle zu einer mit fopen() geöffneten Datei.
  • $fields – die Werte der Zeile.
  • $separator – optional, Standard ist ein Komma.
  • $enclosure – optional, Standard ist ein doppeltes Anführungszeichen.
  • $escape – optional, das Maskierungszeichen. Standard ist ein Backslash, eine leere Zeichenkette schaltet es ab.

Beispiele

$f = fopen("php://memory", "w+");
fputcsv($f, array("id", "name", "preis"), ";", "\"", "");
// ein Wert mit Semikolon und Anführungszeichen kommt in Anführungszeichen
fputcsv($f, array(7, "Tee; grün", "sagte \"hallo\""), ";", "\"", "");
rewind($f);
echo stream_get_contents($f); // id;name;preis\n7;"Tee; grün";"sagte ""hallo"""\n
fclose($f);
// Export für deutsches Excel: ein Semikolon und ein BOM, damit es UTF-8 erkennt
$f = fopen("php://memory", "w+");
fwrite($f, "\xEF\xBB\xBF");
foreach (array(array("Kaffee", 12), array("Tee", 8)) as $row) {
    fputcsv($f, $row, ";", "\"", "");
}
rewind($f);
echo strlen(stream_get_contents($f)); // 19
fclose($f);
// für einen Download im Browser nach php://output schreiben
// header("Content-Type: text/csv; charset=utf-8");
// header("Content-Disposition: attachment; filename=\"export.csv\"");
// $f = fopen("php://output", "w");

Worauf Sie achten sollten

  • Seit PHP 8.4 ist ein Aufruf ohne den Parameter $escape veraltet. Geben Sie alle Parameter an wie im Beispiel.
  • Zeilen enden mit dem Zeichen \n. Das Zeilenende \r\n lässt sich erst seit PHP 8.1 mit dem sechsten Parameter einstellen.
  • Ein Wert, der mit =, +, − oder @ beginnt, wird in Excel als Formel ausgeführt. Behandeln Sie Benutzerdaten im Export, zum Beispiel mit einem Apostroph am Anfang eines solchen Werts.
  • Excel mit deutscher Spracheinstellung öffnet die Datei mit einem Semikolon als Trennzeichen richtig. Ohne die BOM-Markierung liest es den Text in einer Windows-Codepage, und Umlaute gehen kaputt.
  • Dezimalzahlen werden mit einem Punkt geschrieben. Ein Excel mit Dezimalkomma hält sie dann eventuell für Text oder ein Datum.

Verwandte Funktionen:
fgetcsv()
fopen()
implode()