PHP

Gestione dei file in PHP: le funzioni base

Mette a disposizione due modi per memorizzare informazioni in maniera persistente su disco: file e database. In questa guida analizziamo i file.

I file possono contenere qualsiasi tipo di dati, oltre che numerose informazioni sui file stessi. Il linguaggio offre numerose funzioni per la gestione del file system.

Questa guida è dedicata in particolare all’apertura, lettura, scrittura e chiusura di file su disco. Nella guida successiva vedremo invece le funzioni del linguaggio per gestire le directory ed ulteriori funzioni per la gestione dei file.

Prima di andare avanti, introduciamo un concetto fondamentale per poter capire come lavorare con i file.

Puntatore al file

Il puntatore al file o descrittore di file è un numero intero assegnato al file al momento della sua apertura. Esso consente di riferirsi univocamente a tale file fino alla sua chiusura.

Dopo l’apertura, per poter effettuare operazioni sul file non dobbiamo più usare il suo nome ma fare riferimento al suo puntatore.

Per operare sui file è necessario avere accesso al loro descrittore, un record logico contentente informazioni sul file stesso:

  • nome del file
  • tipo del file
  • la sua dimensione
  • informazioni sui permessi di accesso al file
  • la data di creazione
  • la data dell’ultima modifica

Tali descrittori sono memorizzati su disco fisso in apposite aree chiamate directory (o tabelle dei descrittori), che sono file a loro volta.

Le directory hanno una struttura gerarchica rappresentabile come un albero, dove la directory principale è la radice (root) e via via scendendo ci sono le altre directory.

Per poter compiere operazioni sui file è necessario quindi caricare in memoria il descrittore del file, operazione che prende il nome di apertura del file.

Aprire un file con fopen()

Per aprire un file  possiamo utilizzare la funzione fopen(), come mostrato nel seguente esempio

<?php
$filename = 'file.txt';
$handler = fopen($filename, 'r+');
if (false === $handler) {
    printf('Impossibile aprire il file %s', $filename);
    exit;
}
fclose($handler);
php?>
La funzione fopen() prende due parametri:
il file che vogliamo aprire
la modalità di apertura
e restituisce il puntatore al file aperto (nell'esempio abbiamo memorizzato tale puntatore nella variabile $handler). La funzione restituisce false in caso di errore nell'apertura del file.
Chiudere un file con fclose()
Dopo aver terminato di lavorare su un file, questo deve essere chiuso in qualche modo poiché occupa risorse e appesantisce il carico del server.
In PHP è la funzione fclose() che si occupa di chiudere un file per liberare la memoria. Essa prende come parametro il puntatore al file, come mostrato alla riga 10 dell'esempio precedente e ritorna true in caso di successo.
Modalità di apertura file
Nell'esempio precedente abbiamo aperto il file in modalità r+, ossia in lettura e scrittura.
Nella seguente tabella sono riportate le possibili modalità di apertura di un file con fopen()
Modalitàdescrizione
rApre il file in lettura posizionando il puntatore all'inizio del file
r+Apre il file in lettura e scrittura posizionando il puntatore all'inizio del file
wApre il file in lettura e scrittura posizionando il puntatore all'inizio del file. Cancella il contenuto del file. Se il file non esiste lo crea.
aApre il file in scrittura posizionando il puntatore alla fine del file. Se il file non esiste lo crea.
a+Apre il file in lettura e scrittura posizionando il puntatore alla fine del file. Se il file non esiste lo crea.
xCrea e apre un file in scrittura posizionando il puntatore all'inizio del file. Ritorna false e genera un E_WARNING se il file esiste già.
x+Crea e apre un file in lettura e scrittura posizionando il puntatore all'inizio del file. Ritorna false e genera un E_WARNING se il file esiste già.
cApre il file in scrittura e, se non esiste, lo crea. Se il file esiste già il contenuto esistente viene preservato e il puntatore posizionato all'inizio del file. Questa modalità è utile nel caso di lock su file. Per approfondire leggi la documentazione per flock()
c+Apre un file in lettura e scrittura. Vedi modalità c.

Funzione file_exists()

Se proviamo ad aprire un file che non esiste, search PHP genera un messaggio di avviso simile al seguente

PHP Warning: fopen(file.txt): failed to open stream: No such file or directory in...

Per evitare ciò, mette a disposizione la funzione file_exists() che verifica l'esistenza di un file ritornando true oppure false.

Di seguito un esempio

<?php
$filename = 'files.txt';

if (false === file_exists($filename)) {
    printf('Il file %s non esiste', $filename);
}
php?>