Corso PHP: 19 – Leggere e scrivere files (Parte 1^)

19.  Leggere e scrivere files

Vediamo come può essere effettuata la gestione files tradizionali (vedremo successivamente l’uso di database) con il PHP.

Inutile dire che il metodo principe per la memorizzazione e gestione delle informazioni con applicazioni PHP sia il database (usualmente il MySQL); vi sono tuttavia casi dove la gestione di altri files è utile se non indispensabile. Pensiamo ad esempio alla necessità di produrre o leggere file XML o file in genere che provengono oppure devono poi essere letti da programmi esterni come ad esempio i files CSV per interfacciarsi con Excel o file in formato pdf oppure anche semplici file in formato testo.

PHP utilizza quello che viene comunemente chiamato un handle per connetersi ad un file.

Vediamo per iniziare le funzioni fondamentali di apertura e chiusura di un file.

Aprire un file.

La funzione PHP utilizzata è fopen() che ha la seguente sintassi:

resource fopen (string $filename, string $mode)

$filename ovviamente è una stringa che contiene il nome del file che va aperto.

$mode è la modalità nella quale il file va aperto e può assumere uno dei valori seguenti:

➬ ‘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.

➬ ‘x‘:  Crea ed apre il file in sola scrittura; posiziona il puntatore all’inizio del file. Se il file esiste già la chiamata a fopen() fallirà restituendo FALSE e verrà generato un errore di lievllo E_WARNING.

➬ ‘x+‘:  Crea ed apre il file in lettura e scrittura; posiziona il puntatore all’inizio del file. Se il file esiste già la chiamata a fopen() fallirà restituendo FALSE e verrà generato un errore di lievllo E_WARNING.

Qualora l’operazione fallisse la funzione ritornerebbe il valore FALSE.
In caso di successo la funzione ritorna un intero che rappresenta il puntatore al file.
Il PHP permette anche di aprire file remoti tramite protocolli come HTTP e FTP. Occorre tuttavia
assicurarsi di avere i diritti per le operazioni che vogliamo eseguire sul file.

Alcuni esempi:

$fh = fopen ("FileDiTesto.txt", "w");
$fh = fopen ("/home/Percorso/FileDiTesto.txt", "a");
$fh = fopen ("http://www.sito.com/FileDiTesto.txt", "r");
$fh = fopen ("ftp://UserID:Psw@sito.com/FileDiTesto.txt", "w");

Nel 1° caso si apre in scrittura il file ‘FileDiTesto.txt’. Non essendo indicata una directory, il file deve trovarsi, se esiste, nella stessa cartella dello script, altrimenti verrà creato in questa cartella.
Nel 2° esempio è stato indicato un percorso nel quale il file deve trovarsi oppure verrà creato.
Gli ultimi due esempi si riferiscono all’apertura di files remoti.

Nota su apertura di files remoti.
Quando a fopen() viene passato un filename che inizia con ‘http://’ viene recuperata la pagina con una richiesta HTTP  GET. Si può accedere solo al body della pagina con questa modalià, non agli headers e si può solo leggere il file via HTTP, non scriverlo.

Quando a fopen() viene passato un filename che inizia con ‘ftp://’ viene ritornato un puntatore al file e questo può essere aperto in lettura o in scrittura, ma non in entrambe le modalità.

Chiudere un file.

La funzione PHP utilizzata è fclose() che ha la seguente sintassi:

bool fclose (resource $handle)

$handle ovviamente è il puntatore del file che è stato aperto con fopen().

Esempio:

 

<?php
$handle = fopen('somefile.txt', 'r');
fclose($handle);
?>

Ottenere la dimensione di un file.

Anticipiamo la descrizione di questa funzione perché in alcuni casi, come vedremo, per leggere un file occorre indicare la sua dimensione.

La funzione che ci dice la dimensione di un file è filesize() e ha la seguente sintassi:

int filesize (string $filename)

Esempio:

 

<?php
$size = filesize('nomefile.txt');
?>

filesize() restituisce la lunghezza del file espressa in bytes oppure FALSE in caso di errore.

Leggere un file.

Vi sono diversi modi di leggere un file a seconda delle esigenze. Vediamoli:

a) Lettura di una porzione di un file in una stringa.

Per leggere una porzione di un file ( come caso particolare anche l’intero file) in una stringa si usa la funzione fread(). Questa la sintassi:

string fread (resource $handle, int $length)

$handle è il puntatore del file ritornato dalla funzione fopen();

$length è la lunghezza della mporzione di file che si intende leggere. Per leggere l’intero file $length sarà la lunghezza del file ed in questo caso viene utile la funzione filesize() che abbiamo presentato precedentemente e che permette l’utilizzo di fread() senza in realtà conoscere la lunghezza del file.

Vediamo un esempio di utilizzo in caso di lettura dell’intero file:

 

<?php
$filename = "/path/MioFile.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

b) Lettura di un intero file in una stringa.

Un altro mododi leggere un intero file senza dover usare un file handle è quello di utilizzare la funzione file_get_contents().

La sintassi è la seguente:

string file_get_contents (string $filename [, bool $use_include_path [,, int $offset ]])

Si può impostare il parametro opzionale $use_include_path ad “1”, per cercare il file nella ‘include_path’ che è una delle variabili d’ambiente definita nel php.ini che indica la directory ove cercare i files per include, require, fopen(), file(), readfile() e file_get_contents(). Meglio non usare questo parametro.

Abbiamo omesso un altro parametro oggettivamente di scarso utilizzo, mentre l’ultimo $offset può essere indicato per dire da dove iniziare a caricare il file.

Esempio:

 

<?php
echo "<pre>"; // Abilita il display dei line feeds
echo file_get_contents("testfile.txt");
echo "</pre>";
?>

Come detto non occorre aprire e poi chiudere il file ed il risultato della funzione è restituito in una stringa.

La funzione può essere usata per leggere un file attraverso internet fornendo un URL come nome file.

Facciamo un esempio. Scriviamo ed eseguiamo uno script così semplice:

 

<?php
echo file_get_contents("http://ebay.com");
?>

Vedrete comparire la pagina di ebay nel vostro browser:

file_get_contents

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.