• 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.