Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 55

Discussione: Scrivere leggere file.txt con PHP...

  1. #1
    Guest

    Predefinito Scrivere leggere file.txt con PHP...

    ciao,
    ho cercato su Html.it, ma non ho trovato nulla, sto cercando una guida che spieghi come scrivere attraverso un form dei file.txt che poi spieghi anche come leggerli da un' altra pag... mi sapete consigliare qualche guida?

  2. #2
    Ospite Guest

    Predefinito

    Ti scrivo di seguito una lista delle funzioni php che potrebbero esserti utili:

    fopen() che serve per aprire il file.
    fwrite() per scrivere nel file (se hai scelto le modalità di scrittura in fopen())
    fread() per leggere tot bytes del file
    file_get_contents() per inserire il contenuto dell'intero file in una stringa
    file() restituisce un array i cui elementi sono le righe del file
    explode() per dividere una stringa in diverse parti secondo il carattere delimitatore (puoi usare questa funzione per ogni riga del file (file()), con un ciclo)
    Sempre riguardo la suddivisione della riga anche join() o implode() potrebbero ritornare utili.


    Altre che potrebbero esserti utili al momento non me ne vengono in mente...


    Per il passaggio dei dati dal form per l'inserimento vedi qui (php.net - in inglese), o qui (html.it - in italiano), dove puoi trovare info utili sulle variabili superglobali $_GET e $_POST

  3. #3
    Guest

    Predefinito

    ho cresato un file.txt e volevo provare a farlo leggere ma mi da pag bianca:

    Bom ho capito che cosi apre solo il file, ma anche cois mi da pag bianca:
    Codice PHP:
    <?php
    $filename
    = "file.txt";
    $handle = fopen($filename, "r");
    $contents = fread($handle, filesize($filename));
    fclose($handle);
    ?>
    Ultima modifica di Jacki2 : 17-08-2007 alle ore 14.50.42

  4. #4
    Ospite Guest

    Predefinito

    La lettura funziona correttamente, la pagina è bianca perchè non stampi il contenuto del file.
    Dovresti fare cosi:
    Codice PHP:
    $handle = fopen("file.txt", "r");
    echo
    fread($handle, filesize("file.txt"));
    oppure:
    Codice PHP:
    echo file_get_contents("file.txt");

  5. #5
    Guest

    Predefinito

    ok, grazie adesso funziona!
    Ma se voglio scrivere su questo file, ma scrivere attraverso un form, come posso implementarlo?

    Codice PHP:
    <?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";
    }
    ?>

  6. #6
    Ospite Guest

    Predefinito

    Leggi al link alla guida che ti ho fornito sul passaggio di valori tramite GET e POST.

  7. #7
    Guest

    Predefinito

    ci sono riuscito!!! adesso legge/scrive ne ho fatto uno che salva i testi con il il titolo.. cioe titolo.txt me lo salva in testi/titolo.txt... vorrei fare che il file che legge,legga piu file, cioe i nomi che vengono dati tramite il form... é possibile?

    Grazie mille... Grazie a te sono riuscito!!!

    ciaooo

  8. #8
    Ospite Guest

    Predefinito

    mmh...non so se ho capito bene ciò che chiedi.
    Comunque secondo la tua domanda (se ho capito) dovresti usare un nome diverso per ogni file, magari usando la funzione rand() per generare ogni volta un numero casuale.
    Io adotterei un'altra soluzione invece:


    Usi un file txt unico per tutti gli articoli.
    In ogni riga metti titolo e articolo separandoli con un divisore ("|" ?), (se sei su AV, quindi su linux,usa "\n" per andare a capo in scrittura), adottando "a+" come metodo di apertura del file:
    articolo 1|testo articolo 1
    articolo 2| testo articolo 2
    Poi fai così:

    Codice PHP:
    <?
    foreach(file("file.txt") as $riga){
    $p=explode("|",$riga);
    $titolo=$p['0'];
    $testo=$p['1'];
    echo
    "<br /><br />Titolo: ".$titolo."<br />Testo: ".$testo;
    }
    ?>

  9. #9
    Guest

    Predefinito

    scusa, vorrei capire come funziona il codice, cosi che apprendo il funzionamento, mi potresti spiegare come funziona?

    PS: se lo capisco faccio grandi passi avanti,...

  10. #10
    Ospite Guest

    Predefinito

    Detto in poche semplici parole:
    foreach è un ciclo, ovvero serve per compiere una stessa operazione più volte.
    Il primo argomento che viene passato alla suddetta funzione è un array i cui elementi sono le righe del file "file.txt" estratte tramite la funzione file.
    Per ogni riga del file, foreach esegue le operazioni tra parentesi graffe e in ogni esecuzione $riga prende il valore dell'elemento che si legge.
    explode divide poi ogni riga in più parti prendendo "|" come delimitatore.
    $p è quindi un array di queste parti.
    La prima parte della riga (ovvero l'elemento 0) contiene il titolo, quindi $titolo è appunto l'elemento 0 dell'array $p.
    L'elemento 1 del suddetto array (ovvero il testo) viene invece assegnato a $testo.
    Poi stampo i valori con echo, il segno . (punto) serve semplicemente per concatenare le stringhe.

    Ciao!

  11. #11
    Guest

    Predefinito

    ok,ho capito, provo a farlo, poi faccio sapere¨!! per ora grazie mille!!!
    Edit:
    avevo pensato di fare creare un elenco a parte con gli indirizzi dei testi per poi farli apire in un' altro moodo tutti insieme:

    Codice PHP:
    $elenco = $titolo;
    $scrivi2 = "testi/$titolo\n";
    $apri2 = fopen("elenco.txt", "a+");
    fwrite($apri2, $scrivi2);
    fclose($apri2);
    bom mi slava l' elenco correttamenete, pero nn so come fare per farli aprire tutti!!!

    Codice PHP:
    <?php
    $handle
    = fopen("elenco.txt", "r");
    echo
    fread($handle, filesize("elenco.txt"));
    ?>
    se mettessi un $handle = fopen("testi/$titolo.txt", "r"); quando scrive il txt forse me lo apre e legge a sua volta l' altro?

    EDIT2: Ho usato rand() come mi avevi consigliato, ora con il nome del file txt viene -epoi un numero a caso (ho messo tra 0 e 3000)... ho messo una "-" cosi... per bellezza! :)

    Ora devo solo riuscire a farli visualizzare tutti nella stessa pagina...!!!
    il sistema che avevo proposto prima non funziona, perche mi prende quel pezzo che devo salvare nel file.txt come altro codice da eseguire!!! aspetto tuo consiglio.... grazie...
    Ultima modifica di Jacki2 : 17-08-2007 alle ore 20.32.05

  12. #12
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Non ho capito quasi nulla di quello che hai scritto, però forse vuoi leggere tutti i file contenuti nella cartella "testi"?
    Codice PHP:
    <?php
    foreach (glob("testi/*.txt") as $filename) {
    $handle = fopen($filename, "r");
    echo
    fread($handle, filesize($filename));
    }
    ?>
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  13. #13
    Guest

    Predefinito

    funziona, grazie mille!!!
    Ora non mi resta che fare qualcosa di utile...
    EDIT:
    La validazione dei campi bisogna farla in javascript vero? tipo quella che non si puo scrivere html nel form?
    O quella per evitare che ci siano campi vuoti!
    Ultima modifica di Jacki2 : 18-08-2007 alle ore 09.45.45

  14. #14
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Se fai la validazione solo con JavaScript, basta averlo disattivato per non effettuare i controlli. Devi fare i controlli con il PHP e, se vuoi fare qualcosa di più interattivo, utilizza anche JavaScript.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  15. #15
    Guest

    Predefinito

    uhm.... tipo per mettere la massima lunghezza del titolo bisogna fare qualcosa del genere?:


    Non ho trovato una bella guida....

    EDIT: sono riuscito a trovare una strada da solo:

    Codice PHP:
    If ($titolo < 0) {
    echo
    'Commento inserito con successo! <br><a href="leggi.php">Leggi i Commenti!</a>';
    }
    if (
    $titolo == 0) {
    echo
    'Titolo obbligatorio! <br><a href="form.php">Torna!</a>';
    }
    Ora nn so quanti errori ho fatto!!! ma funziona!
    Ultima modifica di Jacki2 : 18-08-2007 alle ore 10.41.53

  16. #16
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    La lunghezza di una stringa la trovi con la funzione strlen.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  17. #17
    Guest

    Predefinito

    un esempio sui controlli:

    Codice PHP:
    if($titolo == "")
    {
    //Non è stato inserito il titolo
    }
    else
    {
    //ok
    }
    oppure

    Codice PHP:
    if(strlen($titolo) == 0)
    {
    //Non è stato inserito il titolo
    }
    else
    {
    //ok
    }

  18. #18
    Guest

    Predefinito

    io ho fatto cosi:

    Codice PHP:
    if ($titolo > NULL) {
    $apri = fopen("testi/$nome.txt", "w");
    fwrite($apri, $scrivi);
    fclose($apri);
    echo
    'Commento inserito con successo! <br><a href="leggi.php">Leggi i Commenti!</a>';
    }
    if (
    $titolo == NULL) {
    echo
    'Titolo obbligatorio! <br><a href="form.php">Torna!</a>';
    }
    va bene? funziona funziona,...

    EDIT.
    se voglio mettere sia $titolo che $testo,
    come faccio a metterli entrambi qui: if ($titolo > NULL)???

    Grazie...
    Ultima modifica di Jacki2 : 18-08-2007 alle ore 12.53.58

  19. #19
    Guest

    Predefinito

    Citazione Originalmente inviato da Jacki2 Visualizza messaggio
    io ho fatto cosi:

    Codice PHP:
    if ($titolo > NULL) {
    $apri = fopen("testi/$nome.txt", "w");
    fwrite($apri, $scrivi);
    fclose($apri);
    echo
    'Commento inserito con successo! <br><a href="leggi.php">Leggi i Commenti!</a>';
    }
    if (
    $titolo == NULL) {
    echo
    'Titolo obbligatorio! <br><a href="form.php">Torna!</a>';
    }
    va bene? funziona funziona,...

    EDIT.
    se voglio mettere sia $titolo che $testo,
    come faccio a metterli entrambi qui: if ($titolo > NULL)???

    Grazie...
    No, non va bene... ma hai letto quello che ti ho scritto?

    Comunque...

    Codice PHP:
    if($titolo == "" && $testo == "")
    {
    //Errore, i campi sono vuoti
    }
    else
    {
    //OK, scrivi nel file
    }
    basta questo semplice codice...

  20. #20
    Guest

    Predefinito

    ok...grazie...
    per i campi obbligatori ho usato ||
    Ho fatto anche che stampa la data!
    ce un modo per fare che quando aggiungi dal form... si ordinano i commenti in base alla data, cioe l' ultimo va in cima?

  21. #21
    Ospite Guest

    Predefinito

    Cioè vorresti ordinare i files nella directory testi in maniera decrescente secondo la data di creazione?
    Allora prova così:
    Codice PHP:
    <?php

    foreach (glob("testi/*.txt") as $filename) {
    $ultimamod = filemtime($filename);
    $f[$ultimamod] = $filename;

    ksort($f);

    $f = array_reverse($f, TRUE);}
    foreach(
    $f as $filename){
    $handle = fopen($filename, "r");
    echo
    fread($handle, filesize($filename)); }
    ?>
    Se vuoi anche conoscere la data puoi usare filemtime() che restituisce il timestamp della creazione del file, poi potresti convertirlo in formato "normale" usando funzioni come date() o getdate().
    Ciao!

  22. #22
    Guest

    Predefinito

    no, io ho una pag leggi.php vorrei che venissero fuori in ordine di data, cioe la data piu nuova in cima! con quel codice si puo?

    EDIT: il codice che mi hai passato funziona! grazie...
    Ultima modifica di Jacki2 : 18-08-2007 alle ore 17.21.44

  23. #23
    Ospite Guest

    Predefinito

    Serve proprio a quello
    Mostra il contenuto dei files nella cartella testi in ordine dal più nuovo al più vecchio.

  24. #24
    Guest

    Predefinito

    ok, Grazie...

    Ora, come si fa a fare visualizzare il link del file.txt che é stato preso?

  25. #25
    Ospite Guest

    Predefinito

    Dopo o prima (a seconda di dove vuoi mostrare il link - sopra o sotto il testo) di:
    Codice PHP:
    echo fread($handle, filesize($filename));
    metti:

    Codice PHP:
    echo "<a href=\"".$filename."\">".$filename."</a>";

  26. #26
    Guest

    Predefinito

    Ho provato a mettere un opzione di cancellazione:

    $cancella = unlink($filename);
    poi piu in sotto:

    echo "<a href=\"".$cancella."\">".Cancella."</a>";

    ma mi da degli errori!!!

    cosa sbagliO?

  27. #27
    Guest

    Predefinito

    Per cancellare un file devi creare una nuova pagina, dove passi il nome del file tramite get, e poi usi la funzione unlink() per cancellare il file...

  28. #28
    Ospite Guest

    Predefinito

    Codice PHP:
    <?php

    foreach (glob("testi/*.txt") as $filename) {
    $ultimamod = filemtime($filename);
    $f[$ultimamod] = $filename;

    ksort($f);

    $f = array_reverse($f, TRUE);}
    foreach(
    $f as $filename){
    $handle = fopen($filename, "r");
    echo
    fread($handle, filesize($filename));
    echo
    "<a href=\"?do=cancella&file=".$filename."\">Cancella</a>";
    }
    if(isset(
    $_GET['do']) && $_GET['do']=="cancella" && !empty($_GET['file']))
    {
    if(
    file_exists($_GET['file']))
    unlink($_GET[file]) OR exit("Errore nell'eliminazione del file ".$_GET['file']);
    else
    exit(
    "Il file ".$_GET['file']. "per cui ha richiesto l'eliminazione non esiste!");
    }
    ?>

  29. #29
    Guest

    Predefinito

    come mai se riamane solo un mess... nn si puo cancellare?

  30. #30
    Ospite Guest

    Predefinito

    In che senso non si può cancellare?
    Che errore ricevi?
    Come si chiama il file che cerchi di eliminare?

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •