PDA

View Full Version : [php] fopen/fwrite un problema!


Gregor
23-05-2008, 21:36
Ho un problema che non riesco a risolvere!
Mediante una form inserisco dei valori in un file txt.

$filename = 'pippo.txt';
$contenuto = "testo da inserire nella prima riga";
$handle=fopen($filename,"r+");
fwrite($handle, $contenuto);
fclose($handle);

Al secondo passaggio, vorrei inserire una seconda riga, che si dovrà posizionare in cima a tutte le altre già presenti!
In sostanza, prima di inserire la seconda riga, devo poter in qualche modo mandare "a capo" quanto già dentro il file pippo.txt, altrimenti mediante $handle=fopen($filename,"r+"); e poi fwrite() sovrascrivo il contenuto di pippo.txt partendo dalla prima riga :(

Spero di essere stato chiaro.

L'output deve essere:

step1: nel file pippo.txt
Prima riga

step2: nel file pippo.txt
Seconda riga
Prima riga

e così via.

Un append "al contrario"...

Help! Tnx!

ndakota
23-05-2008, 21:51
devi tornare con il puntatore all'inizio del file.. un rewind($handle) dovrebbe fare al caso tuo..

Gregor
23-05-2008, 22:12
devi tornare con il puntatore all'inizio del file.. un rewind($handle) dovrebbe fare al caso tuo..

L'ho piazzato tra fopen e fwrite, ma continua a sovrascrivere e non ad "appendere" partendo dall'inizio :(

Gregor
24-05-2008, 09:49
Non penso sia un problema di portare il puntatre ad inizio file, il puntatore è correttamente ad inizio file, ma poi per evitare che si sovrascriva il contenuto del file, devo poter abbassare di un tot di righe il contenuto già presente e poi aggiungere la riga nuova.

ndakota
24-05-2008, 13:49
se lo apri in a+ e poi fai un rewind? prova un po..

Gregor
24-05-2008, 17:00
se lo apri in a+ e poi fai un rewind? prova un po..

Così facendo è come se il rewind non ci fosse! Fa un append, cioè mette in coda...:(

ndakota
24-05-2008, 17:23
strano.. ok che apri in append ma se poi fai un rewind deve tornare all'inizio.. sicuro che non fai altre operazioni tra l'apertura e il rewind?

Gregor
24-05-2008, 17:43
strano.. ok che apri in append ma se poi fai un rewind deve tornare all'inizio.. sicuro che non fai altre operazioni tra l'apertura e il rewind?

No, non ne faccio.
Ma quel comando non dice semplicemente dove si deve posizionare il cursore? Perchè questo avviene, però poi sovrascrive quello che trova da quella posizione in avanti :(

$contenuto = "pippo";
$handle=fopen("file.txt","a+");
rewind($handle);
fwrite($handle, $contenuto);
fclose($handle);


Appende in coda!

Come traduco: "...vai a capo di tre righe e poi inizia a scrivere da lì..."? E' qui il punto!

Tnx!

Vincenzo1968
25-05-2008, 20:44
Ciao Gregor,

per ottenere quello che vuoi, fai così:

1) Crea un nuovo file temporaneo.
2) Inserisci la stringa del secondo passaggio all'inizio di questo file.
3) Leggi il file originale e copia il contenuto nel file temporaneo.
4) Chiudi il file temporaneo.
5) Cancella il file originale.
6) Rinomina il file temporaneo col nome del file originale.

Gregor
26-05-2008, 16:30
Ciao Gregor,
per ottenere quello che vuoi, fai così:


Grazie! Ho risolto proprio così! :D