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știDeprecated: 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ștefgetcsv.
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.