fgetcsv în PHP

Citește o linie dintr-un fișier CSV și o împarte în coloane.

Sintaxă
fgetcsv($stream, ?int $length = null, string $separator = ',', string $enclosure = '"', string $escape = '\\'): array|false

Ce face fgetcsv

fgetcsv citește următorul rând dintr-un fișier CSV deschis cu fopen și returnează un tablou cu valorile coloanelor. Știe să trateze corect valorile între ghilimele, care pot conține separatorul (de exemplu "Popescu, Ion").

Exporturile din Excel în română folosesc des ; ca separator. Din PHP 8.4 trebuie să dai explicit parametrul $escape, altfel primești un mesaj Deprecated. Valoarea recomandată este "", adică fără caracter de escape, ca în standardul CSV.

Parametri

Parametru Descriere
$stream Resursa returnată de fopen.
$length Opțional. Lungimea maximă a unei linii. null înseamnă fără limită.
$separator Opțional. Caracterul dintre coloane. Implicit ,.
$enclosure Opțional. Caracterul care înconjoară valorile. Implicit ".
$escape Caracterul de escape. Dă-l explicit, de obicei "".

Ce returnează

Un tablou cu valorile rândului sau false la sfârșitul fișierului. O linie goală devine [null].

Exemple

Exemplul 1: Citirea tuturor rândurilor

<?php
file_put_contents("clienti.csv", "Ana,Iași,25\n\"Popescu, Ion\",Cluj,40\n");

$f = fopen("clienti.csv", "r");
while (($rand = fgetcsv($f, escape: "")) !== false) {
    echo implode(" | ", $rand) . "\n";
}
fclose($f);

Rezultat

Ana | Iași | 25
Popescu, Ion | Cluj | 40

Exemplul 2: Primul rând ca nume de coloane

array_combine leagă fiecare valoare de numele coloanei, ca să scrii $produs["pret"] în loc de $produs[1].

<?php
file_put_contents("produse.csv", "nume;pret;stoc\nTelefon;1299;5\nHusă;39;120\n");

$f = fopen("produse.csv", "r");
$coloane = fgetcsv($f, null, ";", escape: "");
while (($rand = fgetcsv($f, null, ";", escape: "")) !== false) {
    $produs = array_combine($coloane, $rand);
    echo "{$produs['nume']} costă {$produs['pret']} lei\n";
}
fclose($f);

Rezultat

Telefon costă 1299 lei
Husă costă 39 lei

Greșeli frecvente

  • Nu dai parametrul $escape și în PHP 8.4+ primești Deprecated: fgetcsv(): the $escape parameter must be provided. Adaugă escape: "".
  • Fișierul folosește ;, dar citești cu separatorul implicit ,. Fiecare rând ajunge într-o singură coloană.
  • Împarți rândurile cu explode(",", ...). Valorile între ghilimele care conțin virgulă se rup greșit. Folosește fgetcsv.

Comenzi înrudite

  • fputcsv: Scrie un tablou ca rând într-un fișier CSV, cu ghilimele puse automat unde e nevoie.
  • fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.
  • array_combine: Construiește un tablou asociativ din două liste: una cu cheile și una cu valorile.
  • explode: Împarte un text în bucăți după un separator și le pune într-un tablou.