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.