Import si export de CSV folosind PHP
Fisierele de tip CSV (Comma-Separated Values) pot fi foarte utile, in special pentru ca este mult mai usor sa citesti un fisier CSV fata de un xls de exemplu, ca sa nu mai vorbim de schimbarea standardului.
Cam toate aplicatiile, care se respecta, de calcul tabelar au export si import CSV, deci nu trebuie sa stai cu grija ca nu ai ultima de versiune de Excel pe calculator.
De ce ai face totusi asa ceva? Pentru a gestiona un volum foarte mare de date, cum este o lista de preturi, o lista de clienti etc.
Sa incepem cu cititul, pentru ca de generat un CSV din Excel sau OpenOffice.org este relativ simplu.
1// calea catre fisier
2$fisier = 'test.csv';
3
4// deschidem fisierul pentru citire
5if($fp = fopen($fisier, 'r')) {
6 // extragem cate un rand si specificam delimitatoarele,
7 // in acest caz fiind cele default de la MS Excel.
8 // 1024 este marimea maxima a randului
9 while($row = fgetcsv($fp, 1024, ',', '"')) {
10 // aici ar trebui sa fie prelucrarile pe date,
11 // dar pentru exemplu doar afisez randul
12 var_dump($row);
13 }
14
15 // inchidem fisierul
16 fclose($fp);
17}
Se astepta cineva la ceva mai complicat? Asta e cam toata citirea. Ar mai fi prelucrarea datelor, dar sa zicem ca primul camp din tabela este ID-ul produsului, atunci nu mai trebuie decat facuta interogarea in baza de date dupa aceasta cheie.
Scrierea unui fisier CSV. Daca citirea nu pare complicata, atunci nici scrierea nu va fi:
1// fisierul destinatie
2$fisier = 'fisier.csv';
3
4// datele, intr-un caz real acestea probabil se vor extrage direct din baza de date
5$date = array(
6 array('1', 'Calculator', 520),
7 array('2', 'Mouse', 20)
8 );
9
10// deschidem fisierul in modul de scriere
11// PS: trebuie sa aveti drepturi de scriere pe fisier
12if($fp = fopen($fisier, 'w')) {
13 // parcurgem array-ul date
14 foreach($date as $valori) {
15 // array-ul rezultat se introduce in fisierul CSV
16 fputcsv($fp, $valori, ',', '"');
17 }
18 // inchidem fisierul
19 fclose($fp);
20}
Practic este ca orice alta scriere si citire a unui fisier doar ca se folosesc functii specifice pentru CSV.
Aceste doua functii, respectiv fgetcsv si fputcsv sunt foarte utile in special prin modul in care se pot modifica specificatile fisierului CSV.
Daca se doreste afisarea fisierului rezultat, eventual pentru download, nimic mai simplu:
1$fisier = 'fisier.csv';
2
3// header cu tipul fisierului
4header("Content-type: application/octet-stream");
5// header cu numele fisierului pentru download
6header("Content-Disposition: attachment; filename=\"fisier.csv\"");
7
8// citire fisier in string si afisare
9echo file_get_contents($fisier);
Preactic exemplul de mai sus nu este neaparat pentru un fisier CSV, este mai mult un exemplu general de citire si afisare a unui fisier.
Cam asta e tot cu fisierele CSV folosind PHP.