PHP e file di testo (.txt):
Short link:
Premessa:
Prima di cercare soluzioni ad errori nello script che utilizza i file di testo (.txt)
accertatevi che il vostro gestore di spazio web non richieda specifiche protezioni di
scrittura nella cartella che contiene i file di testo!!!
Se ad esempio un file è comunque generato da uno script php ma non è leggibile,
è probabile che la cartella dove depositate il file non sia stata configurata correttamente
(talvolta l'errore non è nello script!!).
Tali configurazioni solitamente si eseguono dal pannello di controllo del sito gestore dello
spazio web.
Se il problema non è la cartella del file, potrebbero essere i permessi di accesso del
file stesso, in tal caso vi rimandiamo a leggete la pagina relativa alle funzioni
chmod(); chgrp(); chown();
- Un altro comune errore è l'indirizzo del file (chiedetelo al supporto del Vs. hosting),
probabilmente è una riga simile a questa: /home/httpd/vhosts/tuosito.it/nomecartella/file.txt
|
PHP è un linguaggio di programmazione autonomo derivante dal C, ed è nato per soddisfare
alcune esigenze che avevano i programmatori internet.
Questo vuol dire che il binomio PHP-MySql (o qualunque altro database) è nato dopo il
linguaggio di programmazione.
PHP permette oltre l'utilizzo dei database, anche il lavoro con i file di testo (.txt).
Mediante PHP possiamo
leggerli, modificarli, crearli e salvarli. In pratica possiamo
avere un'alternativa ai database (anche se con molti limiti e molto più complicata).
Prima di analizzare le funzioni relative vi informiamo che un eventuale errore con i file di
testo genera un risultato booleano
false con un errore WARNING mostrato a video.
Per ovviare a questo problema possiamo inserire il simbolo
@ prima della funzione (es.
@fopen) che non fa altro che nascondere l'errore generato.
Ricordate che l'errore che appare a video
MOSTRA IL PERCORSO DEL FILE .TXT ed è molto
pericoloso se nel file sono memorizzate password od altre informazioni personali!!
Per verificare l'errore possiamo associare un ciclo if al valore booleano.
Vediamo le
funzioni base che consentono di lavorare con i file di testo:
La funzione
fopen(); apre un file. Come per le connessioni con i database, solitamente
si associa una variabile a questa connessione, la quale identifica il file in maniera univoca.
Esempio:
<?
$var=fopen("nome_file.txt","tipo");
?>
Tipo di apertura file:
Al posto di
'tipo' dobbiamo inserire una costante che identifica il tipo di apertura
file.
| r | Per sola lettura. |
| r+ | Per lettura e scrittura (scrive all'inizio del file). |
| w | Per sola scrittura (I dati già scritti andranno persi e se il file non esiste sarà creato). |
| w+ | Per scrittura e lettura (I dati già scritti andranno persi e se il file non esiste sarà creato. Scrive all'inizio del file). |
| a | Per aggiungere (I dati saranno aggiunti in coda a quelli già scritti, se il file non esiste sarà creato.) |
| a+ | Per aggiungere e lettura (I dati saranno aggiunti in coda a quelli già scritti, se il file non esiste sarà creato.) |
La funzione
fread(); estrae un numero di byte dal file di testo (.txt).
Esempio:
<?
$var=fopen("nome_file.txt","r");
$var2=fread($var,20);
?>
In questo caso abbiamo aperto un file di testo (
nome_file.txt) solo per leggerlo
(
r) ed abbiamo estratto 20 byte.
Per leggere tutto il file dobbiamo scrivere in questo modo:
<?
$var=fopen("nome_file.txt","r");
$var2=fread($var,filesize("nome_file.txt"));
?>
Dove la funzione
filesize() restituisce la grandezza totale del file.
Nel caso dentro il file ci siano dei rientri a capo che vogliamo visualizzare a video dobbiamo
inserire un'altra funzione:
nl2br() che in pratica aggiunge un <br> quando trova un ritorno a capo nel file
di testo.
Esempio:
<?
$var=fopen("nome_file.txt","r");
$leggi=fread($var,filesize("nome_file.txt"));
$sss=nl2br($leggi);
fclose($var);
echo $sss;
?>
La funzione
fwrite(); scrive una stringa nel file di testo che abbiamo aperto.
Esempio:
<?
$var=fopen("nome_file.txt","a+");
fwrite($var, "stringa di prova");
?>
In questo caso abbiamo aperto un file di testo (
nome_file.txt) per aggiungere e lettura
(
a+) ed abbiamo scritto "
stringa di prova" alla fine dei dati già scritti.
Nel caso il file non esista il server lo crea e vi scrive la frase da inserire.
La funzione
fclose(); chiude la connessione aperta verso il file di testo.
Esempio:
<?
$var=fopen("nome_file.txt","a+");
....
....
fclose($var);
?>
Importante:
Ricordate che un sito con script PHP depositato su un hosting non è detto che sia compatibile
con altri hosting. In teoria si, (se la versione di PHP è la stessa), ma in pratica si
potrebbero riscontrare alcune differenze nelle impostazioni di sicurezza che il gestore
dello spazio web impone.
Per essere sicuri di non incorrere in futuri errori è consigliabile chiudere SEMPRE un file
aperto, anche se il sito funziona ugualmente se non chiuso. Potrete risparmiare tempo se in
futuro cambiate il gestore di spazio web!!
La funzione
feof(); verifica se abbiamo raggiunto la fine del file di testo che abbiamo
letto.
Restituisce
true se è andata a buon fine e
false se viceversa
abbiamo errato qualche passaggio.
Controlla se un file esiste. Risponde
true se esiste e
false se non esiste.
Esempio:
<? $var= file_exists("nome_file.txt");
if ($var==true) echo"true<br>";
if ($var==false) echo"false<br>";
?>
Restituisce la grandezza totale del file che indichiamo all'interno delle parentesi.
Si può usare per scrivere un intero file, vedi l'esempio della funzione
fread();
Utilizzato anche per altri scopi può servire per scrivere a video un file di testo. In pratica
include nella pagina web il testo contenuto nel file di testo. Che sia testo, comandi,
uno script, qualunque sia il contenuto verrà inserito nella pagina web in quel preciso punto
dove è inserito il comando
include.
Esempio:
<? include("nome_file.txt"); ?>
Inserisce il testo senza tenere conto dei ritorni a capo, sempre che nel testo non ci siano
dei tag
<br> di HTML.
La funzione
file("nome_file.txt") restituisce un array con gli elementi uguali ad ogni
riga del file di testo.
Possiamo capire quento sia importante questa funzione. Unita alle altre funzioni array è
possibile manipolare un file di testo quasi come un database.
Questa non è una funzione direttamente collegabile ai file di testo, ma il suo inserimento in
questa pagina è giustificato dal suo largo utilizzo con l'istruzione
file();
L'istruzione
count(); conta gli elementi contenuti in un array.
I file di testo possono essere usati per molteplici usi. Dobbiamo solo immaginare il file
di testo come un grosso array, ed operare di conseguenza.
Esempio di procedura:
- Memorizziamo i dati utente in un file (in ogni riga un dato relativo ad un utente.
- A questo punto contiamo le righe (file(); e cont();).
- Adesso con un ciclo for facciamo una scansione del contenuto array e troviamo quello cercato.
Potrete trovare un esempio pratico
qui.