Ce face fputcsv
fputcsv transformă un tablou într-un rând CSV corect: pune ghilimele în jurul valorilor care conțin separatorul, ghilimele sau linii noi și adaugă linia nouă la final.
Pentru fișiere deschise în Excel în română, folosește ; ca separator și scrie la început caracterele BOM ("\xEF\xBB\xBF"), ca diacriticele să apară corect. Ca la fgetcsv, din PHP 8.4 dai explicit parametrul $escape.
Parametri
| Parametru | Descriere |
|---|---|
$stream |
Resursa returnată de fopen. |
$fields |
Valorile rândului. |
$separator |
Opțional. Caracterul dintre coloane. |
$enclosure |
Opțional. Caracterul pentru ghilimele. |
$escape |
Caracterul de escape. Dă-l explicit, de obicei "". |
$eol |
Opțional (PHP 8.1+). Sfârșitul de linie, de exemplu "\r\n". |
Ce returnează
Lungimea rândului scris sau false la eroare.
Exemple
Exemplul 1: Export de clienți
Valoarea cu virgulă a primit automat ghilimele.
<?php
$clienti = [
["nume", "oras", "total"],
["Ana", "Iași", 250],
["Popescu, Ion", "Cluj", 1200.5],
];
$f = fopen("clienti.csv", "w");
foreach ($clienti as $rand) {
fputcsv($f, $rand, escape: "");
}
fclose($f);
echo file_get_contents("clienti.csv");
Rezultat
nume,oras,total
Ana,Iași,250
"Popescu, Ion",Cluj,1200.5
Exemplul 2: CSV pentru Excel în română
BOM-ul nu se vede în editor, dar îi spune lui Excel că fișierul este UTF-8.
<?php
$f = fopen("comenzi.csv", "w");
fwrite($f, "\xEF\xBB\xBF");
fputcsv($f, ["Produs", "Preț"], ";", escape: "");
fputcsv($f, ["Brânză", "24,50"], ";", escape: "");
fclose($f);
echo substr(file_get_contents("comenzi.csv"), 3);
Rezultat
Produs;Preț
Brânză;24,50
Greșeli frecvente
- Construiești rândul cu
implode(",", $rand). Valorile care conțin virgulă sau ghilimele strică structura fișierului. - Nu dai parametrul
$escapeși în PHP 8.4+ primești un mesajDeprecated.
Comenzi înrudite
fgetcsv: Citește o linie dintr-un fișier CSV și o împarte în coloane.fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.fwrite / fputs: Scrie un text într-un fișier deschis cu fopen. fputs este același lucru, cu alt nume.