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

Hi Marc here. I’m the foun­der of Forge12 Inter­ac­ti­ve and have been pas­sio­na­te about buil­ding web­sites, online stores, appli­ca­ti­ons and SaaS solu­ti­ons for busi­nesses for over 20 years. Befo­re foun­ding the com­pa­ny, I alre­a­dy work­ed in publicly lis­ted com­pa­nies and acqui­red all kinds of know­ledge. Now I want to pass this know­ledge on to my cus­to­mers.

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