Visualizzazione risultati 1 fino 10 di 10

Discussione: strano errore su contatore visite

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito strano errore su contatore visite

    Salve utenti di AV,

    Ho appena creato un contatore visite che memorizza le visite su un foglio di testo e una sessione che impedisce allo stesso visitatore di effettuare la stessa visita piu di una volta, il codice è questo:
    Codice PHP:
    <?php
    $visit
    = "Counter.txt";
    if (!isset(
    $_SESSION["visit"])) {
    $_SESSION["visit"] = 1;
    $visit_open = fopen($visit, "r+");
    $visit_read = fread($visit_open, filesize("Counter.txt"));
    fseek($visit_open, 0);
    $visit_write = fwrite($visit_open, $visit_read + 1);
    fclose($visit_open);
    }
    $visit1_open = fopen($visit, "r");
    $visit1_read = fread($visit1_open, filesize("Counter.txt"));
    echo
    $visit1_read;
    fclose($visit1_open);
    ?>
    Lo script funziona fino a quando conta 9 visite, se le conta 10 lo script mi restituisce 1, per poi rifunzionare quando le visite sono 11.

    di cosa si tratta?

    Sevenjeak
    Software developer and much more

  2. #2
    Guest

    Predefinito

    Sinceramente non ho provato lo script, ma non mi piace come struttura.
    Fai in modo che intanto apra il file interessato con una WR (non r+), poi fai l'if e scegli se fare un fread o un fwrite.

    Ciao

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Il codice sembra corretto, benche' contorto, quindi e' probabile che ci siamo dimenticati di una qualche conversione automatica del php, che fa sparire lo 0. Che accade quando arrivi a 19-20-21?

    In compenso, potresti semplificare assai il codice usando file_get_contents() e se usi php5 anche file_put_contents(). E.g.
    Codice PHP:
    $visit = "Counter.txt";

    $numero_visite = file_get_contents($visit);

    if (!isset(
    $_SESSION["visit"])) {
    ++
    $numero_visite;
    $_SESSION["visit"] = true;

    // In php5 il blocco seguente potrebbe essere sostituito da un semplice
    // file_put_contents($visit, $numero_visite);

    if ($visit_open = fopen($visit, "w")) {
    fwrite($visit_open, $numero_visite);
    fclose($visit_open);
    }
    }

  4. #4
    Data registrazione
    04-09-2009
    Messaggi
    183

    Predefinito

    Apparte che non si capisce perchè crei una variabile con dentro il nome del file eppoi riscrivi il nome del file testualmente :P ...
    Comunque ho trovato l'errore!

    Provate ad aggiungere un bell'
    Codice PHP:
    echo "Filesize: ".filesize("Counter.txt")."<br>";
    dopo la chiusura del file aperto con "r+" e vedete la sorpresina... continua a leggere 1 carattere anche se ne contiene 2! ...fino alla successiva riesecuzione della pagina. Quindi ciò che dice svacant è giusto, però bisogna capire il perchè! Good Game ^^

    Usa lo standard come fanno tutti i cristiani:
    Codice PHP:
    $visit_open = fopen($visit, "r");
    $visit_read = fread($visit_open, filesize("Counter.txt"));
    fclose($visit_open);
    $visit_open = fopen($visit, "w");
    $visit_write = fwrite($visit_open, $visit_read + 1);
    fclose($visit_open);
    Age Of Empires GIF Creator & Archive
    New! Blog informatico di scripting PHP avanzato
    Vuoi giocare online a Age of Empires The Conquerors? -> Usa Voobly !! (MSN Zone non lo supporta più dal 19 giugno 2006)
    Il mio clan di The Conquerors -> Rifugio dei Conquerors
    Il mio stato su Xfire Live Video -> Unreal Tournament 2004
    Facebook MMORPG

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Ok, grazie, ho modificato lo script cosi:
    Codice PHP:
    <?php
    $visit
    = "Counter.txt";
    $numero_visite = file_get_contents($visit);
    if (!isset(
    $_SESSION["visit"])) {
    $_SESSION["visit"] = 1;
    if (
    $visit_open = fopen($visit, "w")) {
    fwrite($visit_open, ++$numero_visite);
    }
    }
    echo
    $numero_visite;
    ?>

    Sevenjeak
    Software developer and much more

  6. #6
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    se usi le sessioni ricordati di avviarle con session_start();
    Ultima modifica di dreadnaut : 05-10-2009 alle ore 16.27.49 Motivo: start_session ... _start ;-)
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Grazie, cmq avevo inserito sulla mia pagina gia la sessio_start() con la session_register() visto che inizzializzo $_SESSION["visit"] a 1, ma ora mi hai fatto venire un dubbio, la session_register() serve o ne posso anche fare a meno?
    Ultima modifica di sevenjeak : 07-10-2009 alle ore 16.09.34

    Sevenjeak
    Software developer and much more

  8. #8
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Ma session_register() è deprecata ormai, non trovi sia più semplice utilizzare l'array $_SESSION?

  9. #9
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    quello infatti lo usato, volevo solamente sapere, io ho scritto questo codice:
    Codice PHP:
    session_start();
    session_regiser();
    ...
    $_SESSION["visit"] = 1;
    ...
    Funziona se non metto session_register()?

    Sevenjeak
    Software developer and much more

  10. #10
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Si, anche se non metti session_register funziona.

Regole di scrittura

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