Erstellen einer CSV-Datei mit PHP

Eigentlich ist nichts schwieriges dabei, in PHP eine CSV-Datei zu erstellen. Wie der Name schon sagt, ist das lediglich eine Textdatei mit „Comma-Separated Values“ (siehe Wikipedia) und damit ist das Format der Datei auch schon beschrieben: verschiedene Felder sind mit Kommata (oder auch Semikolon) voneinander abgetrennt, bestmöglich ist Text noch in Anführungszeichen gesetzt.

  1. Was allerdings, wenn die Datei gleich über den Browser an die beim Benutzer vorhandene Anwendung für Tabellenkalkulation (z. B. Microsoft Excel oder OpenOffice Calc) gesendet und damit geöffnet werden soll?
  2. Oder zum Beispiel, wenn in den Felder Zeilenumbrüche vorhanden sind, die auch so erhalten bleiben sollen?

Dann ist die Lösung schon etwas komplizierter und ich beim nächsten Mal nicht wieder suchen muss (und ihr von Anfang an nicht), hab ich hier die Lösung mal kurz zusammengestellt.

Die Lösung für Fall 1 ist eigentlich recht simpel – man setzt einfach die HTTP-Header entsprechend:

header(‚Content-type: text/x-csv‘);
header(‚Content-Disposition: attachment; filename=“filename.csv“‚);

In der ersten Zeile wird dem Browser mitgeteilt, dass der Inhalt der aufgerufenen URL keine HTML-Seite, sondern vom Typ „text/x-csv“ ist. Das ist der sog. MIME-Typ (siehe auch Wikipedia). Die zweite Anweisung sagt aus, dass der folgende Inhalt unter dem Dateinamen filename.csv als attachement zu behandeln ist – also als Download anzuzeigen ist. Somit erscheint dann i.d.R. auch das gewohnte Fenster für einen Download.

Fall 2 stellt sich etwas kniffliger dar, aber mit ein bisschen Spicken bei der Standard-Anwendung phpMyAdmin hilft auch hier weiter.

$data = array();
$data[] = …;

while(list($k, $v) = each($data))
     $data[$k]= ereg_replace(„\015(\012)?“, „\012“, str_replace(„\““,“\“\““, $v));

$line = „\““.implode(„\“;\““, $data).“\“\n“;
echo $line;

In das neu erstellte Array $data werden alle Feldwerte eingelesen. Diese können direkt aus der Datenbank gelesen werden, vom Benutzer eingegeben worden sein, oder auch irgendwie anders entstanden sein. In diesem Array werden anschließend die Anführungszeichen (durch zwei Anführungszeichen) und Zeilenumbrüche (durch einen einfachen Zeilenumbruch) ersetzt. Der Zeilenumbruch muss ersetzt werden, da hier Linux und Windows unterschiedlich agieren. Danach wird per implode eine Zeile zusammengesetzt und im vorliegenden Beispiel direkt ausgegeben (bzw. direkt an den Browser gesendet).

Fertig ist die universale Funktion zur Ausgabe einer Liste als CSV-Datei.

Über Markus Zierhut

Life Is What You Make It!
Dieser Beitrag wurde unter PHP, Softwareentwicklung abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Antworten zu Erstellen einer CSV-Datei mit PHP

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.