lun 06 febbraio 2012

Leggere da un file CSV con PHP

Posted by Modify On luglio - 7 - 2010

File csv
In questo articolo vedremo come utilizzare Php per leggere i dati contenuti in un fil per stamparli su una tabella HTML.
L’utility che creeremo potrebbe essere utile ad esempio per inserire all’interno di un sito statico, dellenews, o una serie di eventi, o qualsiasi cosa che possa essere aggiornata semplicemente aggiornando il file CSV, senza bisogno di installare pesanti CMS.

Un file CSV è in un semplice file di testo formattato secondo certe regole,compatibile con i principali programmi per la trattazione di fogli elettronici come Excel, il foglio di calcolo di open office.
Ogni riga contiene i dati che sono separati tra loro dal carattere “;”

Creiamo il file dati.csv con all’interno l’elenco (per esempio ) delle news su 4 colonne ad esempio (idRiga, data, news, autore) per avere una struttura simie a quella di un database.
Ci sono 2 modi per realizzare quanto detto.
Nel primo metodo useremo la funzione php fopen() per leggere dal file e split() per recuperare i singoli campi

I METODO
Quello che dobbiamo fare e’ semplicemente leggere ogni riga del file e poi suddividere le varie colonne, spezzando ogni colonna con il metodo

1
split(';', $riga)

che ritorna un array con tutti valori separati da “;”.
ad esempio se avessimo:

$riga="pippo;pluto;paperino";
$valori=split(';', $riga);

avremmo un array con i valori {pippo,pluto,paperino}

< ?php
print "<table border=1 width=90% >";
$fd= fopen ("dati.csv", "r");
$x=0;
 
// Intestazione Tabella
print "<tr>";
print "<td>ID</td>";
print "<td>Data</td>";
print "<td>News</td>";
print "<td>Autore</td>";
print "</tr>";
// News in archivio
while (!feof ($fd))
{
   $riga=<strong>fgets</strong>($fd, 4096);
   if($riga!="")
   {
      $arr=<strong>split</strong>(';', $riga);
      print "<tr>";
      print "<td>".$arr[0]."</td>";
      print "<td>".$arr[1]."</td>";
      print "<td>".$arr[2]."</td>";
      print "<td>".$arr[3]."</td>";
      print "</tr>";
      $x++;
   }
}
print "";
fclose($fd);
?>

II METODO
Una funzione PHP molto interessante per il parsing dei file CSV è fgetcsv
Con questa funzione si possono leggere file in formato CSV e ottenere un array già formattato con i campi, da poter leggere riga per riga!
In questo modo evitiamo di dover usare la funzione split per diviere la riga.

vediamo l’esempio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$file="dati.csv";
$delimiter = ",";
$echo = "<table>";  //variabile da stampare
//apro il file
if (($fp = fopen($file, "r")) !== false)
{
 //per ogni riga del file...
 while (($data = fgetcsv($fp, 1000, $delimiter)) !== false) {
 //...inserisco una riga nella tabella
 $echo .= "<tr>";
 foreach( $data as $el ) $echo .= "<td>".$el."</td>";
 $echo .= "</tr>";
 }
 fclose($fp);
}
 
//restituisco la tabella
$echo .= "</table>";
echo $echo;
}
 
//restituisco la tabella
$echo .= "";
echo $echo;



Articoli che potrebbero interessarti:

  1. Mac Osx : Visualizzare i file nascosti I file nascosti sono possono essere file di qualsiasi tipo ma che non sono visibili...
  2. Htacces Tool per modificare velocemente il file .htaccess Qualche settimana fa avevamo pralato del file .htaccess, della sua importanza e dei modi di...

6 Responses to “Leggere da un file CSV con PHP”

  1. Matteo scrive:

    ciao,
    vorrei usare questo codice, magari prima in locale, però non funziona, mica potresti spiegare un pò meglio come usare il codice? magari postando anche un’esempio di csv

    grazie mille

    • Modify scrive:

      Ciao, do per scontato che tu abbia installato un server web con php sul tuo pc e che il server sia attivo.

      Per quanto riguarda il primo metodo :
      nella directory root del webserver (se hai installato wamp di solito è c:\wamp\www\)
      crea il file index.php e copiaci dentro il primo pezzo di codice.
      Nella stessa cartella crea il dile dati.csv ( se vuoi usare un’altro nome o un’altro percorso cambia il nome file nella riga 3 del codice).
      All’interno del file inserisci le righe
      Le righe sono fatte così:

      1;10/11/2010;riga 1 di test;Mauro
      2;12/11/2010;”ciao ciao”;Pippo
      3;13/11/2010;altra riga;Giovanni
      4;11/11/2010;prova;Guest
      5;10/12/2010;”ciao ciao”;Mauro
      6;12/12/2010;”ciao ciao”;Autore
      7;13/12/2010;”ciao ciao”;Mauro

      se vuoi modificare il carattare separatore (ad esempio la virgola ‘,’ al posto del punto e virgola ‘;’) modifica la riga 19 del codice.
      Salvato il file csv
      per vedere lo script all’opera sul browser digita l’indirizzo http://127.0.0.1/ndex.php
      e dovresti vedere tutte le righe del file csv

  2. Matteo scrive:

    nel secondo metodo l’output restituito è separato da “;” per togliere questo fastidioso problema e impaginare perfettamente la tabella basta sostituire la variabile
    $delimiter = “,”;
    con
    $delimiter = “;”;
    e tutto magicamante funzionerà, poi si può iniziare a fare esperimenti come

    $file=”dati.csv”;
    $delimiter = “;”;
    $echo = “”; //variabile da stampare
    //apro il file
    if (($fp = fopen($file, “r”)) !== false)
    {
    //per ogni riga del file…
    while (($data = fgetcsv($fp, 1000, $delimiter)) !== false) {
    //…inserisco una riga nella tabella
    $echo .= “”;
    foreach( $data as $el ) $echo .= “”.$el.”";
    $echo .= “”;
    }
    fclose($fp);
    }

    //restituisco la tabella
    $echo .= “”;
    echo $echo;
    }

    //restituisco la tabella
    $echo .= “”;
    echo $echo;

    così le parole in output saranno colorate di rosa!

  3. Deh scrive:

    Ciao,
    innanzitutto grazie del tutorial :-) .
    Avrei un dubbio…
    ma se nel caso avessi l’ultima voce del mio file csv che vorrei fosse un link (tipo scaricare un pdf) come devo fare?….io ho utilizzato il metodo 2.
    grazie

  4. emulk scrive:

    Ciao, grazie del tutorial , e fatto benissimo XD, volevo chiederti e se all’interno del mio file volessi cercare un campo ben preciso ad esempio : se voglio cercare l’autore “pippo ” all’interno del mio fil CSV e in output voglio avere l’intera riga con tutti i campi ovvero : 2;12/11/2010;”ciao ciao”;Pippo
    come dovrei scriverlo ??
    grazie in anticipo

Leave a Reply

L’80° anniversario della Nascita di Francois Truffaut nel logo google di oggi

E’ per celebrare il regista francese  François Truffaut il Doodle di oggi. Ricorre infatti l’anniversario della sua nascita avvenuta il [...]

Creare un modulo in Joomla 1.7

Disponibile un nuovo articolo per Mr Webmaster. I moduli sono tasselli importantissimi nella creazione di un sito web Joomla e [...]

Rendimenti Adsense in Calo nel 2012

Il primo mese di questo nuovo anno è ormai terminato ed è tempo dei primi bilanci. La crisi economico/finanziaria  che [...]

Stili, override e layout alternativi in Joomla 1.7

Disponibile un nuovo articolo per Mr Webmaster. L’articolo ”Stili, override e layout alternativi in Joomla 1.7″  è una guida alla personalizzazione del [...]