Funzioni: il file system

Utilizzando php si possono compiere parecchie operazioni interessanti sui file (copiarli, spostarli, moificarli, etc.).

La prima cosa da capire è che non si lavora realmente su un file, ma sul suo puntatore. In pratica il puntatore è un numero intero non negativo (non è assolutamente inportante il valore che assume) che viene utilizzato per riferirsi al file preso in considerazione.
In genere il puntatore viene chiamato $fp (File Pointer) o $fd (File Descriptor), ma si può anche cambiare nome.

La funzione che assegna un file ad un puntatore è la seguente:
fopen (nome_file, mode)

Il modo di apertura del file può essere:
r: apre il file in sola lettura e posiziona il puntatore all'inizio del file. Se il file non esiste, viene visualizzato un errore.
r+: apre il file in lettura e scrittura e posiziona il puntatore all'inizio del file. Se il file non esiste, viene visualizzato errore.
w: apre il file in sola scrittura, posiziona il puntatore all'inizio del file e tronca il file a lunghezza zero (ossia sovrascrive le informazioni contenute nel file). Se il file non esiste, prova a crearlo.
w+: apre il file in lettura e scrittura, posiziona il puntatore del file all'inizio del file e tronca il file a dimensione zero (ossia sovrascrive le informazioni contenute nel file). Se il file non esiste, tenta di crearlo.
a: apre il file in sola scrittura e posiziona il puntatore alla fine del file. Se il file non esiste, prova a crearlo.
a+: apre il file in lettura e scrittura e posiziona il puntatore alla fine del file. Se il file non esiste, prova a crearlo

Nel caso si lavori su sistemi Windows, allora esiste anche il modo b: in questo modo il file viene considerato come binario e non come file di testo. I sistemi Unix invece non fanno differenza tra file binari e di testo.

Vediamo qualche esempio:

$fp=fopen("/home/max/elenco.txt", "r");
Apre in lettura il file elenco.txt contenuto nella cartella /home/max. Questo funziona su sistemi Unix: notate la differenza con l'esempio seguente, fatto su sitema Windows

$fp = fopen ("c:\\max\\elenco.txt", "r");
Apre in lettura il file elenco.txt contenuto nella cartella max sul disco fisso c:. Questo funziona su sistemi Windows.

$fp=fopen("http://openskiss.info/elenco.txt", "r");
Il comando fopen apre anche file residenti su altri host. In questo caso il file è elenco.txt presente su openskills.info


Una volta aperto un file si possono compiere numerose operazioni sullo stesso. Si può leggere un carattere alla volta, leggere una riga alla volta, leggere l'intero file, scrivere sul file, chiudere il file.
Vediamo le funzioni nel dettaglio:

fgetc($fp): legge un carattere alla volta e restituisce una stringa contenente un solo carattere. Restituisce FALSE se incontra la fine del file (EOF ossia End Of File).

fgets($fp, lunghezza_stringa): legge una stringa di lunghezza definita da (lunghezza_stringa-1) byte. La lettura termina anche quando viene raggiunta la fine della linea o la fine del file (EOF). Se non viene specificata nessuna lunghezza, allora di default viene impostato 1024 byte.

fread($fp, lunghezza_stringa): esattamente come fgets, solo che anzichè leggere (lunghezza_stringa-1) byte legge esattamente lunghezza_stringa byte. Non si ferma se raggiunge la fine di una riga, ma solo se finisce i byte impostati o se raggiunge la fine del file.

readfile(nome_file): apre il file specificato, lo legge, lo stampa in formato standard output e restituisce il numero di byte letti dal file. Se si verifica un errore viene resituito FALSE: per evitare errori è sufficiente aggiungere il carattere @ davanti a readfile.

fputs($fp, stringa, lunghezza_stringa): scrive sul file puntato da $fp il contenuto di "stringa" (oppure, se specificato, i primi "lunghezza_stringa" byte).

fwrite($fp, stringa, lunghezza_stringa): uguale a fputs.

feof($fp): verifica se il puntatore ha raggiunto la fine del file. In caso positivo (o anche in caso di errore) restituisce TRUE, altrimenti FALSE.

fclose($fp): una volta terminato l'utilizzo, chiudere sempre il file. Restituisce TRUE in caso di successo e FALSE in caso di errore. I file vengono comunque chiusi automaticamente alla fine dello script.


Vediamo ora qualche semplice esempio:

$fp = @fopen("http://openskills.info/index.php","r");
if ($fp)
{ echo "Il file esiste!"; }
else
{ echo "il file non esiste"; }

Abbiamo aperto in lettura il file index.php su openskills.info: se il file viene trovato viene stampato un messaggio di conferma. Abbiamo usato il simbolo @ davanti a fopen per evitare strani errori che possano bloccare lo script.


$fd = fopen ("/tmp/inputfile.txt", "r");
while (!feof ($fd)) {
    $buffer = fgets($fd, 4096);
    echo $buffer;
}
fclose ($fd);

Classico esempio di lettura file riga per riga. Il file viene aperto in lettura (usando fopen); a questo punto viene fatto ciclare: finchè non viene raggiunta la fine del file (usando feof) viene memorizzata ciascuna riga in una variabile chiamata $buffer, che viene successivamente stampata. Alla fine il file viene chiuso (fclose).


$fp=fopen("prova.txt","w");
fputs($fp, "Prova inserimento testo");

Il file prova.txt viene aperto in lettura e scrittura (se non esiste viene creato, se invece esiste viene "troncato" il suo contenuto) utilizzando fopen. A questo punto all'interno del file viene scritta la stringa "Prova inserimento testo" usando fputs.

Privacy Policy