PHP File Open: Guida alla Lettura e Scrittura di File in PHP
PHP offre funzioni stabili per leggere, scrivere e aggiungere dati ai file. Scopri come usare fopen(), fread(), fwrite() e gestire gli errori.
Leggere e scrivere file è una delle operazioni più comuni nella programmazione lato server: si salvano documenti caricati, si generano log, si memorizzano dati in cache e si leggono file di configurazione. PHP mette a disposizione un insieme piccolo e stabile di funzioni per questo scopo, e tutte iniziano con una sola chiamata — fopen(). Questo capitolo spiega come aprire un file, leggerlo, scriverci, aggiungervi dati, chiuderlo e gestire gli errori che inevitabilmente si incontreranno lungo il percorso.
Comprendere la Funzione fopen()
La funzione fopen() apre un file (o un URL) e restituisce un file handle — una risorsa che si passa a tutte le altre funzioni sui file. Accetta due argomenti obbligatori: il percorso del file e la modalità che determina cosa è consentito fare con esso e da dove parte il puntatore al file interno (il cursore che indica la posizione corrente).
$handle = fopen("example.txt", "r");Se il file non può essere aperto, fopen() restituisce false ed emette un avviso, quindi occorre sempre verificare il valore restituito prima di utilizzare l'handle.
Modalità dei file
La modalità è l'argomento più importante: controlla se il file viene letto, sovrascritto o se vi vengono aggiunti dati, e se un file mancante viene creato.
| Modalità | Lettura | Scrittura | Puntatore parte da | Tronca? | Crea se mancante? |
|---|---|---|---|---|---|
r | sì | no | inizio | no | no (fallisce) |
r+ | sì | sì | inizio | no | no (fallisce) |
w | no | sì | inizio | sì | sì |
w+ | sì | sì | inizio | sì | sì |
a | no | sì | fine | no | sì |
a+ | sì | sì | fine | no | sì |
x | no | sì | inizio | n/a | sì (fallisce se esiste) |
x+ | sì | sì | inizio | n/a | sì (fallisce se esiste) |
Alcune regole da tenere a mente:
- Usare
rquando il file deve già esistere e si ha bisogno solo di leggerlo. wew+cancellano il contenuto del file nel momento in cui viene aperto — non usarli mai quando si vuole conservare i dati esistenti.aea+sono la scelta sicura per i log: scrivono sempre alla fine e non troncano mai.xex+proteggono dalla sovrascrittura accidentale di un file esistente, il che è utile per operazioni di tipo "crea una sola volta".
Nota: su Windows, aggiungere b alla modalità (ad es. rb, wb, ab) per aprire il file in modalità binaria ed evitare la conversione dei caratteri di a capo che può corrompere i file non di testo. Su Linux e macOS il flag b è inoffensivo, quindi aggiungerlo ovunque mantiene il codice portabile.
Leggere File in PHP
Per leggere un file, aprirlo in modalità lettura (r) e usare fread(). fread() accetta l'handle del file e il numero di byte da leggere; combinarlo con filesize() permette di leggere l'intero file in una sola volta.
Ecco un esempio che legge il contenuto completo di un file:
<?php
$file = fopen("example.txt", "r");
if ($file) {
$contents = fread($file, filesize("example.txt"));
fclose($file);
echo $contents;
}
?>Leggere un file riga per riga
Per i file di grandi dimensioni, leggere tutto in memoria è uno spreco. Usare fgets() per leggere una riga alla volta e feof() ("end of file") per fermarsi quando si raggiunge la fine:
<?php
$file = fopen("example.txt", "r");
if ($file) {
while (!feof($file)) {
$line = fgets($file);
echo $line;
}
fclose($file);
}
?>L'alternativa più breve: file_get_contents()
Per letture semplici in cui si vuole semplicemente ottenere l'intero file come stringa, file_get_contents() esegue apertura, lettura e chiusura in una singola chiamata:
<?php
$contents = file_get_contents("example.txt");
echo $contents;
?>Usare fopen() + fread()/fgets() quando si ha bisogno di un controllo granulare (streaming, letture parziali, blocco); ricorrere a file_get_contents() quando si vuole semplicemente ottenere il testo del file.
Scrivere File in PHP
Per scrivere su un file, aprirlo in modalità scrittura (w) e usare fwrite(). fwrite() accetta l'handle del file e la stringa da scrivere, e restituisce il numero di byte scritti (o false in caso di errore). Ricordare che w tronca il file prima, quindi parte sempre da un file vuoto.
Ecco un esempio che scrive dati su un file:
<?php
$file = fopen("example.txt", "w");
if ($file) {
fwrite($file, "This is some data.");
fclose($file);
}
?>Proprio come per la lettura, esiste una scorciatoia con una sola chiamata per la scrittura: file_put_contents() apre, scrive e chiude il file in una singola istruzione.
Aggiungere Dati ai File in PHP
Per aggiungere dati a un file in PHP, si può usare la funzione fopen() in modalità append (a) e la funzione fwrite(). Ciò consente di aggiungere dati alla fine di un file, anziché sovrascriverlo.
Ecco un esempio che aggiunge dati a un file:
<?php
$file = fopen("example.txt", "a");
if ($file) {
fwrite($file, "This is some additional data.");
fclose($file);
}
?>Chiudere File in PHP
È importante chiudere un file dopo aver terminato di lavorarci, per liberare le risorse di sistema e prevenire la corruzione dei dati. Questo si fa usando la funzione fclose(), che accetta come argomento il puntatore al file restituito da fopen().
Ecco un esempio che dimostra il modo corretto di chiudere un file in PHP:
<?php
$file = fopen("example.txt", "r");
if ($file) {
// Perform file operations here
fclose($file);
echo "File closed successfully.";
}
?>Gestione degli Errori in PHP
È importante gestire correttamente gli errori quando si lavora con i file in PHP. Ad esempio, se si tenta di aprire un file che non esiste, oppure si tenta di scrivere su un file non scrivibile, si riceverà un errore.
Per gestire gli errori, si può usare l'istruzione if e la variabile $file restituita da fopen(). Se fopen() restituisce false, significa che si è verificato un errore. Negli ambienti di produzione, si può usare l'operatore di soppressione degli errori @ oppure configurare un gestore di errori personalizzato per gestire gli avvisi in modo elegante senza interrompere il layout della pagina.
Ecco un esempio che dimostra la gestione degli errori in PHP:
<?php
$file = fopen("example.txt", "r");
if ($file) {
$contents = fread($file, filesize("example.txt"));
fclose($file);
echo $contents;
} else {
echo "Error: Unable to open file.";
}
?>Riepilogo
fopen() è la base della gestione dei file in PHP. La modalità scelta determina tutto: r legge, w sovrascrive, a aggiunge dati e x crea un file solo se non esiste già. Leggere con fread()/fgets(), scrivere con fwrite(), verificare sempre se l'handle è valido e chiuderlo con fclose() quando si ha finito. Per letture e scritture semplici in un'unica operazione, preferire file_get_contents() e file_put_contents().
Per approfondire, consultare fopen(), fread() e fwrite(), e i capitoli più ampi su PHP File Handling e PHP Filesystem.