03.05.19 19359 Views 8

credit: ©kite_rin(stock.adobe.com)

PHP Tutorial #30

CSV-Dateien mit PHP erstellen und auslesen

Mit der PHP-Funktion fputcsv lassen sich sehr einfach Daten in einer CSV-Datei speichern. Praktisch: Die Funktion erstellt die CSV-Datei gleich mit. Wir zeigen Ihnen hier, wie Sie fputcsv in PHP einsetzen.

Falconbyte unterstüzen

Betrieb und Pflege von Falconbyte brauchen viel Zeit und Geld. Um dir auch weiterhin hochwertigen Content anbieten zu können, kannst du uns sehr gerne mit einem kleinen "Trinkgeld" unterstützen.

Schnelles Code-Beispiel:

<?php

$daten = array('Wert1', 'Wert2', 'Wert3', 'Wert4', 'Wert5');
$fp = fopen('daten.csv', 'a');
fputcsv($fp, $daten);
fclose($fp);

?>

    Inhaltsverzeichnis

  1. Was sind CSV-Dateien überhaupt?
  2. Datenreihe in CSV-Datei schreiben
  3. Mehrere Datenreihen in CSV-Datei schreiben
  4. Daten aus CSV-Datei lesen
  5. Mit CSV-Daten weiterarbeiten

Was sind CSV-Dateien überhaupt?

CSV steht für Comma-separated values, also "durch Kommata getrennte Werte". Es muss aber nicht immer ein Komma sein: Strichpunkt, Doppelpunkt oder ein anderes Zeichen sind auch möglich.

CSV-Dateien sind einfache Textdateien, in denen Tabellen abgebildet werden. Besonders häufig werden CSV-Dateien in Tabellenkalukations-Anwendung (z.B. Excel) oder Datenbanken für den Datenimport bzw. -export eingesetzt.

Ein konkretes Beispiel:

Wir haben in einer EXCEL-Datenbank eine Tabelle mit Kundendaten. Das könnte vereinfacht so aussehen:

EXCEL CSV import export beispiel

Wenn wir diese Tabelle in EXCEL als CSV-Datei speichern, erhalten wir eine Reintext-Datei mit der Endung .csv. Der Inhalt dieser Datei stellt sich dann so dar:

Name;Vorname;Wohnort;KundenNummer
Picard;Jean-Luc;Sternenflotte;1234
Reddington;Red;unbekannt;4545
Dexter;Morgan;Miami;6666

Die einzelnen Daten sind hier mittels Semikolon getrennt und jeder Datensatz ist eine Zeile.

Soviel zur Theorie. Sehen wir uns nun an, wie wir CSV-Dateien mit PHP erstellen und auslesen können.

Datenreihe in CSV-Datei schreiben

Sehen wir uns zunächst noch einmal das Code-Beispiel von oben an: .

<?php

$daten = array('Wert1', 'Wert2', 'Wert3', 'Wert4', 'Wert5');
$fp = fopen('daten.csv', 'a');
fputcsv($fp, $daten);
fclose($fp);

?>

Als erstes suchen wir uns in PHP die Daten heraus, die wir in die CSV-Datei schreiben wollen. Genauer gesagt: Wir legen uns ein Array mit Daten zurecht ($daten).

Jetzt lassen wir uns mithilfe der Funktion fopen eden Dateizeiger zurückgeben und speichern diesen in einer Variablen ($fp).

fopen benötigt zwei Parameter: Der erste Parameter verlangt den Dateinamen der CSV-Datei. Der zweite Parameter beschreibt den Zugriffstyp des Streams. Setzen wir "w" ein, heißt das, dass falls die Datei schon exisitiert, der Inhalt überschreiben wird. Wollen wir aber Daten ans Ende einer schon bestehenden CSV-Datei anhängen, sollten wir "a" als Argument übergeben. In beiden Fällen wird die Datei neu erstellt, wenn sie noch nicht exisitiert.

Jetzt starten wir die Funktion fputcsv und übergeben der Funktion den Dateizeiger ($fp) und das Array ($daten). Damit schreiben wir eine Zeile in der CSV-Datei.

Am Ende schließen wir die mit fclose wieder.

Beim Ausführen des Programms erhalten wir die gewünschte Datei daten.csv mit folgendem Inhalt:

Wert1,Wert2,Wert3,Wert4,Wert5

Zugriffsrechte richtig auswählen

Unter Umständen erhalten Sie beim Starten folgende Fehlermeldung: Warning: fopen(daten.csv): failed to open stream: Permission denied in....

Das heißt, dass der Schreibzugriff verweigert wurde. Wenn das der Fall ist, müssen Sie die Zugriffsrechte des Ordners/ Verzeichnisses, in dem die CSV-Datei geschrieben wird, anpassen:

Bei Mac: Rechtsklick auf den Ordner > Informationen > Zugriffsrechte (unten) > Lesen & Schreiben für alle

Bei Windows: Rechtsklick auf den Ordner > Properties > Security

Mehrere Datenreihen in CSV-Datei schreiben

Eine einzelne Zeile zu erzeugen ist meist aber nicht genug. Um mehre Datenreihen bzw. Zeilen in der CSV-Datei zu speichern, benötigen wir mehrere Arrays. Jedes Array wird einmal mit fputcsv ausgeführt:

<?php

$daten = array(
    array('aaa', 'bbb', 'ccc', 'ddd', 'eee'),
    array('111', '222', '333', '444', '555'),
    array('AAA', 'BBB', 'CCC', 'DDD', 'EEE')
);

$fp = fopen('daten.csv', 'w');

foreach($daten as $arrays){
    fputcsv($fp, $arrays);
}

fclose($fp);

?>

Wir haben die Daten in einem zweidimensionalen Array angeordnet und lassen die einzelnen Arrays in einer foreach-Schleife mit der Funktion fputcsv durchlaufen.

So erhalten wir in der CSV-Datei folgenden Inhalt:

aaa,bbb,ccc,ddd,eee
111,222,333,444,555
AAA,BBB,CCC,DDD,EEE

Einfaches auslesen

Um den Inhalt einer CSV-Datei einfach auszulesen und am Bildschirm anzeigen zu lassen, verwenden wir fgetcsv() in Kombination mit einer while-Schleife und der Funktion feof():

$file = fopen("daten.csv","r");

while(! feof($file))
{
    print_r(fgetcsv($file));
    echo "<br>";
}

fclose($file);

Die Funktion feof() prüft, ob das Ende der CSV-Datei erreicht ist. Falls dem so ist, wird true zurückgeliefert (ansonsten false).

Innerhalb der Schleife arbeiten wir nun mit der Funktion fgetcsv() und übergeben das Datei-Handle als Parameter. fgetcsv() liest immer genau eine Zeile aus der CSV-Datei und gibt den Wert als String zurück. Diese Zeile geben wir mit print_r() am Bildschirm aus. Danach springt der Dateizeiger zur nächsten Zeile.

Nun wird der Grund für die Einbindung in eine while-Schleife deutlich: fgetcsv() soll nämlich solange ausgeführt werden, bis das Ende der Datei erreicht ist.

Im Browserfenster erhalten wir somit alle Datenreihen der CSV angezeigt:

Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd [4] => eee )
Array ( [0] => 111 [1] => 222 [2] => 333 [3] => 444 [4] => 555 )
Array ( [0] => AAA [1] => BBB [2] => CCC [3] => DDD [4] => EEE )

Mit CSV-Daten weiterarbeiten

Zum reinen Anzeigenlassen der CSV-Daten ist dieser Weg in Ordnung. Wie gehen wir aber vor, wenn wir die Datenreihen der CSV-Datei mit PHP weiterverarbeiten wollen?

Eine Verarbeitung der Daten aus der CSV ist dann möglich, wenn wir die einzelnen Zeilen in einem zweidimensionalen Array speichern.

Auch hierz nutzen wir wieder die Funktion fgetcsv() in Kombination mit feof() und einer while-Schleife:

$index = 0;
$file = fopen('daten.csv', 'r');

while(! feof($file))
{
    $array[$index] = fgetcsv($file); // Speichert CSV-Zeile in Array
    $index++;
}

fclose($file);

Jeder Schleifendurchlauf liefert die einzelnen Daten einer CSV-Zeile als Array zurück. Jedes Array repräsentiert also eine CSV-Zeile. Die einzelnen Arrays werden wiederum in einem übergeordnetem Array gespeichert.

Nun können wir in PHP auf die importieren Datensätze der CSV-Datei bequem über die Indices des Arrays zugreifen:

for($i = 0; $i < count($array); $i++){
    for($y = 0; $y < count($array[$i]); $y++) {
        echo $array[$i][$y] . " ";
    }
    echo "<br>";
}
aaa bbb ccc ddd eee
111 222 333 444 555
AAA BBB CCC DDD EEE

Java lernen

text text

PHP Lernen

zur PHP

JavaScript lernen

move nove move

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen