• User •

    gestione file txt

    ciao a tutti
    sto imparando da poco il linguaggio php.....
    mi trovo però ad aver necessità di creare qualcosa senza db.
    Ho trovato nel sito il fantastico script di giorgio tave e l'ho provato....tutto ok.però mi chiedo....
    e se volessi oltre a visualizzare il contenuto del file txt anche cancellare o modificare un eventuale riga a cui non sono più interessato?
    potreste aiutarmi.
    per comodità vi posto il codice che ho utilizzato...
    grazie in anticipo

    per leggere il contenuto ho copiato

    <?php

    if (!$p_file = fopen("miofile.txt","r")) {
    echo "Spiacente, non posso aprire il file miofile.txt";
    } else {
    while(!feof($p_file))
    {
    $linea = fgets($p_file, 255);
    echo "$linea
    ";
    }
    fclose($p_file);
    }
    ?>


  • Moderatore •

    con quello script mandi tutto nella variabile $linea che ogni volta assume il valore della riga.

    Potresti parsarla ed aggiungere valori e poi rimetterlo nel file con fputs, oppure mettere tutto in un array con $linea[]=""; parsare quella variabile e rimettere dentro nel file.

    E' più semplice a farlo che a dirlo 🙂


  • User •

    sono alle prime armi, quindi incontro difficoltà nel comprendere ciò che dici.
    potresti parlare con linguaggio "dummies".
    mi spiego meglio...vorrei sapere come si posssono gestire file txt qualora volessi cancellare o modificare una sola riga di dati e non tutto il file.
    con il file che ti ho postato posso solamente visualizzare il contenuto, ma non cancellarlo o modificarlo.


  • Moderatore •

    🙂

    if (!$p_file = fopen("miofile.txt","r")) { #qui dici: se non ho aperto correttametne in lettura (r) il file

    echo "Spiacente, non posso aprire il file miofile.txt"; #allora stampa l'errore
    } else { #altrimenti
    while(!feof($p_file)) #fino a quando non raggiungo la fine del file
    {
    $linea = fgets($p_file, 255); #assegna a $linea il valore preso dal file aperto, fino al carattere 255 **

    echo "$linea
    "; #e poi stampalo.
    }
    fclose($p_file); #chiudi il file.

    ** qua potresti mettere una cosa del tipo:$linea[] = fgets($p_file, 255)

    alla fine avresti un array, un insieme di variabili del file (nota che ottieni lo stesso con altri comandi, ma tralascio, per ora).

    avresti quindi: $linea[0] che contiene la prima riga
    $linea[1] che contiene la seconda.
    $linea[n-1] che contiene lan-esima riga.

    che potresti poi successivamente modificare come vuoi con le varie str_replace, ereg_replace etc etc. 🙂

    alla fine riscorri l'array e lo rimetti dentro il file.
    esempio stupido:
    if ($fp = fopen("miofile.txt","w")) { #se ho aperto correttamente in scrittura (w) il file
    foreach ($linea as $n => $valore) { # fin quando non scorro tutto $linea
    fwrite ($fp, $valore,255) ; #inserisci nel file il contenuto di ogni singola linea
    }
    fclose ($fp); #poi chiudi il file
    } else {
    echo "errore bla bla bla";, se nonriesci ad aprire il file, stampa quest'errore.
    }

    Nota che lo stesso potresti farlo con altri metodi, ad esempio con file_put_contents(), ma per capire va benissimo.

    PS http://it2.php.net/manual/it/function.fwrite.php
    http://it2.php.net/manual/it/function.fopen.php

    ed in generale http://it2.php.net/manual/it/ref.filesystem.php
    possono esserti d'aiuto.