Come leggere e scrivere un file in PHP
Il linguaggio PHP mi permette di scrivere e leggere file in una directory del server. In entrambi i casi, leggere o scrivere, il file deve essere prima aperto con la funzione fopen() e poi chiuso con la funzione fclose().
Come scrivere un nuovo file
Per scrivere un nuovo file di testo
In questo esempio scrivo un nuovo file sul server. Apro il file in scrittura indicando "w" (write) nella funzione fopen().
- <?
- $filename = 'file.txt';
- $scrivi = fopen($filename, 'w');
- fwrite($scrivi, "Primo record\n");
- fclose($scrivi);
- ?>
Dove $scrivi è semplicemente la variabile che uso come puntatore per gestire le operazioni sul file fisico tramite lo script.
Il file deve trovarsi in una directory con permesso di scrittura.
Nota. Bisogna fare attenzione, la modalità di scrittura 'w' crea un file ex novo. Se il file già esiste viene cancellato. Per aggiungere dati a un file esistente è necessario usare la modalità 'a' ossia append.
La funzione fwrite() scrive nel file un record con la stringa "Primo record".
fwrite($scrivi, "Primo record\n");
Al termine della stringa aggiungo il carattere speciale \n di ritorno a capo per indicare che il record è finito. In caso contrario, senza indicare \n il successivo fwrite continuerebbe a scrivere sullo stesso record.
Al termine della scrittura chiudo il file con la funzione fclose().
Come scrivere in un file esistente
Dopo aver creato un file posso aggiungere nuovi record aprendolo in modalità 'a' (append).
- <?
- $filename = 'file.txt';
- $scrivi = fopen($filename, 'a');
- fwrite($scrivi, "Secondo Record \n");
- fclose($scrivi);
- ?>
Lo script è simile al precedente.
In questo caso però i record sono aggiunti al file senza cancellare quelli precedenti.
Come leggere un file
Per leggere un file apro il file in modalità lettura 'r' (read).
- <?
- $filename = 'file.txt';
- $leggi = fopen($filename, 'a');
- $size=1024;
- while (!feof($handler)) {
- $rec=fread($leggi, $size);
- echo($rec);
- }
- fclose($leggi);
- ?>
Uso un ciclo while per leggere il contenuto del file dal primo all'ultimo record.
Nota. La condizione del ciclo è !eof() dove ! è la negazione mentre eof() significa end of file. Pertanto, il ciclo itera fin quando è vera la condizione "non è la fine del file". Quando il ciclo raggiunge la fine del file, la condizione diventa falsa e il ciclo termina l'iterazione.
La lettura del record avviene tramite la funzione fread().
fread($leggi, $size);
In questo caso devo specificare anche la dimensione di ogni blocco di lettura in byte.
Nota. Aumentando il valore di $size la lettura diventa più veloce ma aumenta la memoria RAM impiegata in ogni iterazione. Viceversa, riducendolo la lettura è più lenta ma consuma meno memoria RAM.
E così via.