Creare un file di testo con il php

Creare un file di testo con il php
Nelle attività didattiche di laboratorio del quarto anno Mercurio o ragionieri programmatori vengono realizzate delle applicazioni utilizzando come supporti logici i file di testo. Creare un archivio e registrare dei dati è ormai consuetudine per chi opera nell'informatica.
Le istruzioni in Php che seguiranno consentono di craere un file di testo e inserire i record in sequenza andando a capo ogni volta che il record viene memorizzato.
Rammentiamo che per grandi quantità di dati è bene utilizzare i database.
E’ chiaro che utilizzando il file.txt le limitazioni sono molte:
  • deve trattarsi di una mole di dati molto piccola
  • è più macchinoso scrivere e leggere
  • non si possono fare delle vere queries ma interrogazioni con ricerca scorrendo tutto il file
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:


<?php
$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 archivio 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:

<?php
$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

<html>
<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 file di testo
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);

?>

fonte parziale: http://www.bigthink.it/creare-un-database-di-testo-in-php/



Commenti

  1. buongiorno Prof Latella,
    Prima di tutto veramente complimenti per il blog: veramente utilissimo...

    Mi chiamo Federico Hoefer e le scrivo per vedere se riesce ad aiutarmi per un "problemino" che ho con eBay Partner Network e Blogspot.
    Ebay chiede la verifica del proprio sito (prima di affiliarsi al loro programma ...) tramite l'inserimento di un file di testo (.txt) fornito appunto da Ebay e che va caricato nella Root del prorprio sito (nel mio caso libriamazon.blogspot.it)....

    ma come faccio ad inserire un file di testo nella root del mio sito (...../blogspot.com)??

    Grazie
    F.H.
    federicohoefer@hotmail.com
    3396465894

    RispondiElimina

Posta un commento

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)