PHP: Auslesen einer CSV Datei, Zeile für Zeile

Marc Wag­ner

Okto­ber 24, 2022

2 min read|

PHP ermög­licht es dir, mit­tels fgetcsv CSV Datei­en ein­fach und unkom­pli­ziert Zei­le für Zei­le aus­zu­le­sen.

fgetcsv #

Wie das Gan­ze mit fgetcsv funk­tio­niert, zeigt das fol­gen­de Bei­spiel:

/**
 * Auslesen einer CSV Datei mit fgetcsv
 * 
 * @param string $path_to_csv_file    Der Pfad zur CSV Datei
 * @param array &$result              Speichert die Daten in der Referenzvariabel.
 */
function read_csv(string $path_to_csv_file, array &$result): bool{
    $handle = fopen($path_to_csv_file, 'r');
    
    if(!$handle){
       return false;
    }

    while(false !== ($data = fgetcsv($handle, null, ';'))){
       $result[] = $data;
    }
    
    return true;
}

$response = [];
if(!read_csv('/pfad/zur/datei.csv', $response)){
   echo "CSV Datei konnte nicht geöffnet werden.";
}

foreach($response as $row_number => $data){
   echo $row_number.': '.$data[0];
}

Die Funk­ti­on read_csv() über­nimmt dabei das öff­nen der CSV Datei und das aus­le­sen der ein­zel­nen Zei­len. Das Ergeb­nis wird anschlie­ßend in der Refe­renz $result hin­ter­legt. Die Daten wer­den dabei bewusst in der Refe­renz hin­ter­legt, anstatt die­se als Array zurück­zu­ge­ben. Das ermög­licht es uns, zu bestim­men, ob die Funk­ti­on kor­rekt aus­ge­führt wur­de, oder aber z.B. die Datei nicht exis­tiert.

In dem Bei­spiel oben haben wir für die Funk­ti­on fgetcsv() das Trenn­zei­chen ‘;’ ange­ge­ben. Die­ses kann abwei­chen und muss natür­lich abhän­gig von der CSV Datei gewählt wer­den.

Ihr soll­tet beim Lesen der Datei dar­auf ach­ten, dass die­se ggf. ein BOM (Byte Order Mark) ent­hal­ten. Falls dies der Fall ist, emp­fiehlt es sich, die Datei zunächst über z.B. Note­pad++ zu kon­ver­tie­ren.

Fazit #

In PHP las­sen sich CSV Datei­en schnell und unkom­pli­ziert aus­le­sen und bear­bei­ten und z.B. in Daten­ban­ken impor­tie­ren. Abhän­gig von der Grö­ße der Datei kann es jedoch vor­kom­men, dass die Kon­fi­gu­ra­ti­on für die “max_execution_time” in der PHP.ini ange­passt wer­den muss. CSV Datei­en eig­nen sich her­vor­ra­gend, um Daten schnell und ein­fach zwi­schen ver­schie­de­nen Sys­te­men zu über­tra­gen. Dank fgetcsv() kön­nen CSV Datei­en Zei­le für Zei­le aus­ge­le­sen wer­den.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar