http://Tafaz.altervista.org
Leggere e Scrivere files con PHP
Stella PienaStella PienaStella PienaStella VuotaStella Vuota - 301 voti - 3226 visite

Essendo PHP un programma lato server, ci mette a disposizione delle funzioni di lettura e scrittura su filesystem, questo ci permette ad esempio di archiviare dei dati nel caso di un hosting che non ci fornisce un database (esempio pratico: il contatore di visite di questo sito è basato su un file, in quanto quando l'ho creato non avevo ancora attivato il supporto MySQL).

Prima di tutto per poter accedere ad un file sia in lettura che in scrittura si deve aprire uno stream verso il file e per fare ciò useremo la funzione fopen.
Questa funzione accetta da due a quattro parametri che andando per ordine sono:
filename: il nome del file che vogliamo aprire (tipo stringa)
modo: il modo in cui il file verrà aperto, ad esempi sola lettura o lettura/scrittura (tipo stringa)
usa include_path: dice se cercare il file nelle directory specificate nel paramentro include_path in php.ini (tipo booleana)
contesto: definisce il contesto dello stream, solo per utenti esperti! (tipo risorsa)
mentre il tipo di variabile ceh ci ritorna è una resource (risorsa) che è lo stream vero e proprio.

Senza farci troppo spaventare da questi parametri teniamo conto che generalmente i primi sono più che sufficenti per operare sui file.

Il primo parametro, filename, dev'essere una stringa contenente il nome del file sul quale aprire lo stream. Se si specifica solo il nome del file questo verrà cercato nella directory di esecuzione dello script, o se usa include_path è impostato a true verrà cercato anche nelle directory specificate da questa direttiva.
Il nome del file può anche contenere la directory in cui risiede se questa è diversa da quella dello script in esecuzione, questa potrà essere specificata con un percorso relativo o assoluto, quindi filename potrà essere 'nomefile.est' o './dir/nomefile.est' o ancora '/www/dir/nomefile.est'.

Il secondo parametro invece invece definisce il modo in cui viene aperto lo stream al file, nel sito php.net c'è una tabella riassuntiva devi vari modi di apertura del socket che riporto qui sotto

Modo
Descrizione


'r'
Apre in sola lettura; posiziona il puntatore all'inizio del file.


'r+'
Apre in lettura e scrittura; posiziona il puntatore all'inizio del file.


'w'
Apre il file in sola scrittura; posiziona il puntatore all'inizio del file e tronca il file alla lunghezza zero. Se il file non esiste, tenta di crearlo.


'w+'
Apre in lettura e scrittura; posiziona il puntatore all'inizio del file e tronca il file alla lunghezza zero. Se il file non esiste, tenta di crearlo.


'a'
Apre in sola scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo.


'a+'
Apre in lettura e scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo.


'x'
Crea ed apre il file in sola scrittura; posiziona il puntatore all'inizio del file. Se il file esiste già la chiamata a fopen() fallirà restituendo FALSE e verrà generato un errore di lievllo E_WARNING. Se il file non esiste si tenterà di crearlo. Questo equivale a specificare i flag O_EXCL|O_CREAT nella sottostante chiamata a open(2) . Questa opzione è supportata a partire dalla versione 4.3.2 di PHP, e funziona solo con i file locali.


'x+'
Crea ed apre il file in lettura e scrittura; posiziona il puntatore all'inizio del file. Se il file esiste già la chiamata a fopen() fallirà restituendo FALSE e verrà generato un errore di lievllo E_WARNING. Se il file non esiste si tenterà di crearlo. Questo equivale a specificare i flag O_EXCL|O_CREAT nella sottostante chiamata a open(2) . Questa opzione è supportata a partire dalla versione 4.3.2 di PHP, e funziona solo con i file locali.



Ora che abbiamo aperto uno stream verso il file non ci resta che leggerne il contenuto o scriverci, per far questo useremo le funzioni fread e fwrite.
Passiamo ad analizzare anche queste due funzioni:
fread accetta due parametri fread ( resource handle, int length ) che sono rispettivamente lo stream che abbiamo ottenuto tramite fopen, e la lunghezza in byte che vogliamo leggere (che dovrà essere un numero intero), mentre il valore che ci ritorna sarà ovviamente una stringa contenente ciò che ha letto dal file.
fwrite invece accetta due parametri più uno opzionale fwrite( resource handle, string string [, int length] )), il primo sarà sempre il nostro stream al file, il secondo il testo da scrivere nel file, mentre il terzo se specificato indicherà il numero di byte da scrivere, cosicchè se il secondo parametro è maggiore del terzo, verrà troncato.
Il valore che questa funzione ci ritorna è il numero di byte scritti o FALSE se fallisce la scrittura.

Ultima ma non per importanza resta fclose che serve per chiudere lo stream verso il file. Questa funzione accetta un solo parametro bool fclose( resource handle ) che è l'identificativo dello stream da chiudere e ritorna TRUE o FALSE a seconda se l'operazione di chiusura dello stream è andata a buon fine o meno.

A questo punto non ci resta che il soltio esempio chiarificatore

il primo in scrittura

$f = fopen("new.txt","w+"); //apro un puntatore verso un file che non esiste, usando l'opzione w+ se non esiste tenta di crearlo
if(is_resource($f)){
fwrite($f,'ciao mondo'); //scrivo del testo nel file
fclose($f); //chiudo lo stream
} else {
echo 'non posso creare il file';
}


e il secondo in lettura

$f = fopen("new.txt","r"); //apro lo stream in sola lettura verso il file
if(is_resource($f)){
fread($f,filesize("new.txt")); // cerco di leggerne l'intero contenuto (filesize mi restituisce la lunghezza in byte del file)
fclose($f); //chiudo lo stream
} else {
echo 'non posso leggere il file';
}




Ritorna alla pagina Articoli

COMMENTI

Aggiungi un commento!
(I commenti verranno moderati prima della pubblicazione)


PHP Powered  Smarty Powered  MySQL Powered  Valid XHTML 1.0 Transitional  Valid CSS!  View Matteo Tinazzi's profile on LinkedIn

Logo Licenza Creative Commons  


Grafica realizzata da DrMarvel^