Spesso potremmo aver necessità di utilizzare un database. Tuttavia, se si tratta di un piccolo script che non useremo spesso, invece di andare a creare tabelle su MySQL, possiamo utilizzare un semplice file di testo e andare a scrivere e leggere delle stringhe.
E’ chiaro che le limitazioni sono molte:
- deve trattarsi di una mole di dati molto piccola
- è più macchinoso scrivere e leggere
- non si possono fare query
Può comunque tornare utile ed è un buon punto di partenza per imparare a manipolare i file di testo con PHP.
Vediamo allora passo dopo passo come fare.
Aprire un file di testo: fopen()
La funzione fopen() apre un collegamento tra una risorsa, indicata dal parametro filename, ed un flusso:
$handle = fopen("/home/rasmus/file.txt","r");
$handle = fopen("/home/rasmus/file.gif","wb");
$handle = fopen("http://www.example.com/","r");
$handle = fopen("ftp://user:password@example.com/somefile.txt","w");
?>
Utilizzeremo fopen() per aprire il nostro database di testo.
Scrivere un file di testo: fwrite()
Sintassi: int fwrite ( resource $handle , string $string [, int $length ] )
Questa funzione scrive il contenuto di string nel flusso del file puntato da handle. Se l’argomento length è specificato, la scrittura si arresterà dopo aver scritto length byte o alla fine di string se si verificasse prima:
$filename = 'test.txt';
$somecontent = "Aggiunge questa riga al file\n";
// Verifica che il file esista e sia riscrivibile
if (is_writable($filename)) {
// In questo esempio apriamo $filename in append mode.
// Il puntatore del file è posizionato in fondo al file
// è qui che verrà posizionato $somecontent quando eseguiremo fwrite().
if (!$handle = fopen($filename, 'a')) {
echo "Non si riesce ad aprire il file ($filename)";
exit;
}
// Scrive $somecontent nel file aperto.
if (!fwrite($handle, $somecontent) === FALSE) {
echo "Non si riesce a scrivere nel file ($filename)";
exit;
}
echo "Riuscito, scritto ($somecontent) nel file ($filename)";
fclose($handle);
} else {
echo "Il file $filename non è accessibile";
}
?>
Ecco, con queste poche righe di codice abbiamo già creato uno script che aggiunge una frase al file test.txt.
Dobbiamo notare però, che i file si possono aprire con fopen() in diversi modi (nello script proposto si apre in sola letture alla fine del file).
Leggere un file di testo: fread()
La funzione fread() estrae un numero di byte dal file di testo (.txt).
Esempio:
$file = fopen("test.txt","r");
$buffer = fread($file, 20);
?>
In questo caso abbiamo aperto un file di testo (test.txt) solo per leggerlo (r) ed abbiamo estratto 20 byte.
Per leggere tutto il file dobbiamo scrivere in questo modo:
$file = fopen("test.txt","r");
$buffer = fread($file, filesize("test.txt"));
?>
Dove la funzione filesize() restituisce la grandezza totale del file.
Andare a capo: nl2br()
La funzione aggiunge un <br /> quando trova un ritorno a capo nel file di testo.
Esempio:
$file = fopen("test.txt", "r");
$leggi = fread($file, filesize("test.txt"));
$content = nl2br($leggi);
fclose($file);
echo $content;
?>
Creiamo il nostro database testuale
Vediamo ora come applicare il tutto in un semplice database di testo.
Nel file test.txt inseriamo i dati nel seguente formato:
Nome:Cognome:email
Vediamo allora come leggere ed interpretare il file di testo:
$percorso = file("test.txt");
while(list(,$value) = each($percorso)){
list($nome, $cognome, $email) = split("[:]", $value);
#Usiamo trim() per eliminare eventuali spazi vuoti
$params["nome"] = trim($nome);
$params["cognome"] = trim($cognome);
$params["email"] = trim($email);
#Stampiamo i risultati a video
echo $params["nome"]." - ".$params["cognome"]." - ".$params["email"]. "<br />";
}
?>
Ma se non siamo soddisfatti e vogliamo fare il tutto in automatico, possiamo creare un form simile:
codice form insert.php
<body>
<form method="post" action="insert2.php">
<fieldset>
<legend>Inserimento dati</legend>
Nome: <input type="text" name="nome" />
Cognome: <input type="text" name="cognome" />
E-mail: <input type="text" name="email" />
</fieldset>
<input type="submit" value="Calcola">
</form>
</body>
</html>
… per poi richiamarli da questa pagina e scriverli sul “database”:
script php insert2.php
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$email = $_POST['email'];
$somecontent = $nome."-".$cognome."-".$email."<br>";
$somecontent .= "\r\n";
$myFile = "test.txt";
$fh = fopen($myFile, 'at');
fwrite($fh, $somecontent);
?>
Ovviamente questo script è altamente sconsigliato nel caso si abbia una grande mole di dati o per fare query particolarmente complesse. Si presta invece ottimamente per salvare piccole quantità di dati strutturati, in modo da renderli persistenti anche senza un database.




$myFile = “test.txt”;
$fh = fopen($myFile, ‘at’);
fwrite($fh, $somecontent); (da insert2.php)
Perchè hai aggiunto “t” ad “a”?
Questioni di compatibilità Unix/Windows…. non è necessario comunque
Un consiglio .. così come è strutturato il database è accessibile a tutti , chiunque può entrare e rubare le informazioni contenute in esso.
Ho costruito un tatabase simile come accorgimento durante la ase di scrittura sul file di testo ho inserito i dati all’interno di tag php e il file l’ho chiamato .php in questo modo ad un eventuale intruso con intenzione di accedere senza permesso al database, non verrebbe mostrato nulla dato che sarebbe processato come script e non come un file di testo normale. ^^ Saluti Bell’articolo
Ottima idea , grazie
c’è un piccolo errore nel file di lettura del database:
riga 4
… split([":"], $value);
va sostituito con:
… split(["-"], $value);
stavo cercando uno script per la registrazione utenti php senza database che si appoggia solo su file di testo lei sa come si fanno questi script? grazie cordiali saluti buon natale in anticipo.