Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 64 di 67
  • livello intermedio
Indice lezioni

Accedere ai file

Come gestire con PHP la lettura, scrittura e modifica di file: fopen, fwrite e fclose
Come gestire con PHP la lettura, scrittura e modifica di file: fopen, fwrite e fclose
Link copiato negli appunti

Uno degli aspetti fondamentali della programmazione è quello di poter accedere a fonti di dato esterne al fine di recuperare o salvare delle informazioni utili ai fini della nostra applicazione. PHP, come tutti i linguaggi di programmazione, fornisce una ricca libreria per l'accesso ai file ed alle risorse presenti sul server. Con l'avvento di PHP 5, è stato aggiunto anche il supporto a particolari tipi di risorse, chiamate stream, in modo che sia possibile accedere a qualunque tipo di fonte come se si stesse accedendo ad un file (un po' come accade in Linux, dove la maggior parte dei sistemi di input/output hardware possono essere letti e scritti come se fossero file).

Le operazioni principali sui file sono essenzialmente quelle di lettura, scrittura e posizionamento (PHP fornisce moltissime operazioni ausiliarie per gestire completamente i file, come operazioni per l'eliminazione e la prova d'esistenza, che analizzeremo in modo più approfondito in seguito). La maggior parte delle operazioni effettuate sui file avvengono applicando delle funzioni che accettano come parametro una risorsa che rappresenta il file. La risorsa (recuperata con fopen, come vedremo in seguito) è un tipo di dato speciale gestito internamente da PHP, che serve al motore del linguaggio di programmazione come indicativo per delle informazioni a basso livello richieste per il corretto funzionamento della libreria utilizzata.

Vediamo un piccolo esempio:

<?php

//Presuppongo che la directory corrente abbia i permessi corretti

$fp = fopen('prova.txt', 'w+'); //Apro il file prova.txt in lettura, lo creo se non esiste
fwrite($fp, ciao a tutti, come va?); //Scrivo una stringa sul file
fclose($fp); //Chiudo il file aperto precedentemente

?>

Il programma precedente è molto semplice: crea un file prova.txt, vi scrive dentro "ciao a tutti, come va?" e lo chiude. L'operazione di apertura di un file avviene attraverso la funzione fopen che accetta, nella sua forma base, due parametri: il primo rappresenta il percorso (path) del file sul quale vorremmo operare. Il secondo è una stringa che indica alla funzione quali sono le operazioni che si desiderano svolgere sul file. Per una lista dettagliata di queste rimando alla documentazione ufficiale, ma le più importanti sono:

  • '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.

Come è possibile notare dalla descrizione dei parametri elencati precedentemente, si fa riferimento al puntatore di un file. Il puntatore non è altro che un indicatore numerico che specifica la posizione attuale all'interno del file dalla quale verranno eseguite le operazioni richieste. Il posizionamento del puntatore avviene tramite la funzione fseek, che accetta come parametri la risorsa del file, un numero di byte, ed una costante che indica se il numero di byte è assoluto (SEEK_SET), se deve essere aggiunto alla posizione corrente (SEEK_CUR) oppure se deve essere aggiunto alla fine del file (SEEK_END).

Un semplice esempio per chiarire:

<?php

// Apro il file prova.txt in scrittura e lo riempio con 10 righe di testo
$fp = fopen(prova.txt, w+);
for($i = 0; $i < 10; ++$i)
{
   fwrite($fp, Stringa di prova numero .$i.n);
}
fclose($fp);

// Ora apro il file in lettura, mi muovo al suo interno, e stampo parti di contenuto
$fp = fopen(prova.txt, r);
fseek($fp, 10, SEEK_SET); //Mi posiziono al 10° carattere
$prova = fread($fp, 20); //Leggo 20 caratteri partendo dalla posizione corrente
echo $prova;
echo "<br />";
echo "La posizione del puntatore all'interno del file è: ".ftell($fp);
fclose($fp);

?>

Nel codice precedente ho aperto in scrittura prova.txt e l'ho riempito un file con 10 righe di testo. Poi, dopo averlo chiuso, l'ho nuovamente aperto in lettura, ho spostato il puntatore di 10 posizioni, ho letto 20 caratteri con la funzione fread ed ho stampato la stringa letta seguita dalla nuova posizione del puntatore (10 + 20 = 30). La funzione ftell accetta solamente la risorsa rappresentante il file e restituisce la posizione del puntatore al suo interno, mentre la funzione fread accetta come secondo parametro il numero di byte da leggere. Dopo la lettura il puntatore verrà spostato del numero di byte specificato. Giocate un po' con queste funzioni per capirne il corretto funzionamento.

Ti consigliamo anche