PHP come utilizzare i files di testo (fopen fread fwrite fclose).

Continua il nostro viaggio all'interno del potente linguaggio lato server. Oggi ci occuperemo di un'interessante feature, ovvero la manipolazione dei files di testo.

Le funzioni che invocheremo sono: fopen, fwritefread, e fclose. Si tratta di funzioni che -perlappunto- hanno la capacità di aprire, leggere, scrivere e chiudere i file di testo.

Un breve excursus prima di passare alla pratica.

Iniziamo dalla funzione fopen.

I due parametri di cui necessita sono PATH e MODE; il primo indica il percorso del file, il secondo la modalità con cui trattare quest'ultimo. 8 opzioni ne differenziano il comportamento, interessando il posizionamento del puntatore (all'inizio o alla fine del file), la  modalità (sola lettura, sola scrittura o entrambe), la possibilità di creare o sovrascrivere il file (se vi va di approfondire, questo è il link alla guida ufficiale).

Il risultato della funzione fopen fornisce un parametro (l'handle) fondamentale alle funzioni fwrite e fclose.

Per quanto attiene alla funzione fwrite, c'è poco da dire: essa prende come argomento l'handle, e il contenuto da immettere nel file;

fread ha invece una sintassi più misteriosa: per funzionare ha bisogno del nome del file e della dimensione alla quale interrompere la lettura, e quindi la useremo unitamente alla funzione filesize (funzione ad hoc per estrapolare la dimensione di un file);

fclose, sempre in coda agli script che coinvolgono anche le altre funzioni di cui abbiamo appena parlato, ha come argomento l'handle e...credo immaginiate cosa faccia.

Ecco un esempio di utilizzo delle 4 funzioni.

[spoiler effect="slide"]

<?php
/**data e IP verranno concatenate all'interno della variabile $contenuto */
$data =(date("d-m-y"));
$contenuto=$data." - IP [<b>".getenv("REMOTE_ADDR")."</b>]\n"."<br>";#qua va il testo da scrivere nel documento;

$nomefile="listaaccessi.log";#il nome del file che andremo a creare (importante per la funzione fread);
$res=fopen("$nomefile","a+");#il file da aprire e la relativa modalità;
if(!$res)die("errore apertura file");#un controllo sull'handle: in caso di problemi lo script terminerà restituendo un messaggio d'errore;
/**lettura: in realtà non basterebbe il solo nome, ma il path completo del file*/
$dati_letti=fread($res,filesize($nomefile));#salvo il risultato dell'operazione di lettura su una variabile;
/**stampa a video dei risultati*/
echo "<b>INIZIO DEL CONTENUTO</b><BR>".$dati_letti."<BR><b>FINE DEL CONTENUTO</b>";
echo('<BR><center>processo completato</center>');#un messaggio per indicare che l'esecuzione è avvenuta;

fwrite($res,$contenuto);#scrivi sul file indicato nell'handle il contenuto della var $contenuto;
fclose($res);#chiusura del file

?>

[/spoiler]

Questo file si comporta esattamente come un classico file "diario".

Abbiamo scelto di scrivere in esso, di volta in volta, data di connessione e IP di ciascun avventore.

Otteniamo la data tramite la funzione date(d-m-y) - tra parentesi abbiamo indicato la formattazione italiana;

l'indirizzo IP è invece ricavato interrogando la variabile globale REMOTE_ADDR, contenuta all'interno dell'array $_SERVER.

A fine stringa, sono presenti un ritorno del carrello (\n), per avere un file più ordinato, ma anche un <br> (facilmente sostituibile con una funzione), che consente di mandare a capo anche nella visualizzazione su browser.

Per la funzione fopen, si è scelta la modalità r+, che consente di aprire il file in lettura e scrittura, aggiungendo di volta in volta i dati in testa ad esso; questa opzione comporta la creazione del file, se non  presente al momento dell'esecuzione.

Volendo, le fasi di lettura e scrittura del file possono essere separate (nell'esempio coesistono per questioni di praticità).

In ogni caso, l'ordine di apparizione (lettura-scrittura) deve rimanere questo, pena la mancata visualizzazione dei contenuti (su di ciò non ho indagato).

Un eventuale passaggio successivo potrebbe essere l'integrazione con un form o un controllo sul file creato da parte di un altro script, che potrebbe estrarre le occorrenze in base alla data, quindi i visitatori unici (magari ne riparleremo).

Spero che abbiate gradito lo spunto e che possa servirvi per eventuali progetti futuri.

Alla prossima!

 

Autore: Luigi Lacquaniti

Web designer freelance.

Condividi su