Visualizzazione risultati 1 fino 5 di 5

Discussione: Contatore visite uniche

  1. #1
    Guest

    Predefinito Contatore visite uniche

    Eccomi di nuovo qui
    Stavo cercando di creare un contatore visite in php, che sfrutta un file di testo, fin qua non c'erano problemi, poi però volevo che contasse le visite uniche,cioe se uno visita il sito due volte lo stesso giorno viene contata solo la prima.
    Ho provato a usare i cookie, in poche parole il contatore funziona cosi:
    se il cookie non esiste, ne crea uno con valore pari al timestamp corrente, se il cookie esiste gia, lo controlla, se è di un giorno piu vecchio della data corrente, aumenta il contatore, altrimenti no.

    il mio problema è, mettiamo che uno visita il sito oggi alle 4 di pomeriggio, il contatore aumenta e imposta il cookie a quella data.
    giorno sucessivo, 2 di pomeriggio, il contatore non aumenta, eppure è trascorso un giorno, sebbene non siano trascorse precisamente 24h la data e cambiata!
    come potrei risolvere il problema?
    Ho provato a salvare il giorno in formato numerico nei cookie, per confrontarlo, ma viene automaticamente convertito in formato timestamp vanificando tutto

    posto il codice:

    Codice PHP:
    <?php

    // impostazioni di configurazione
    $nome_file = 'zzz.php';
    $contatore_unico = true; /* valori possibili: true,false impostano se il contatore contera i visitatori unici o le visualizzazioni */

    // non modificare nulla oltre questo punto
    function controlla_cookie()
    {
    if (isset(
    $_COOKIE['data_visita']) && time()>($_COOKIE['data_visita']+86400))
    {
    setcookie('data_visita',time(),time()+86400);
    return
    true;
    } elseif (!isset(
    $_COOKIE['data_visita']))
    {
    setcookie('data_visita',time(),time()+86400);
    return
    true;
    } else
    return
    false;
    }

    $warning = "";
    if (@!
    file_exists($nome_file) or @filesize($nome_file) == 0)
    {
    $handle = @fopen($nome_file,"w");
    if (
    $handle)
    {
    @
    fwrite($handle,'<?php|1|');
    @
    fclose($handle);
    $numero_visite = 1;
    } else {
    $warning = 'Impossibile Aprire il file in modalita scrittura. Controllare permessi';}
    } else
    {
    $contenuto = file_get_contents($nome_file);
    $arr = explode('|',$contenuto);
    if (
    $contatore_unico)
    {
    if (
    controlla_cookie()) $somma = 1; else $somma = 0;
    } else
    $somma = 1;
    $handle = @fopen($nome_file,"w");
    if (
    $handle)
    {
    $nuovo_numero = ($arr[1]+$somma);
    @
    fwrite($handle,"<?php|$nuovo_numero|");
    @
    fclose($handle);
    $numero_visite = $nuovo_numero;
    } else {
    $warning = 'Impossibile Aprire il file in modalita scrittura. Controllare permessi';}
    }

    function
    contatore($numero_visite,$warning)
    {
    if (!@isset(
    $warning) or @empty($warning))
    echo
    "$numero_visite";
    else
    echo
    "<a href=\"#\" onClick=\"alert('$warning')\">Errore</a>";
    }


    contatore($numero_visite,$warning);
    ?>

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

    Predefinito

    invece di salvare nel cookie il valore di time(), potresti metterci la data come date('Ymd') ad esempio - tralasci ore minuti e secodi, ma confronti solo il giorno.

  3. #3
    Guest

    Predefinito

    ci ho provato, ma il php prima di salvarlo nei cookie effettua automaticamente la conversione in timestamp e invece di salvare giorno 4 agosto salva il timestamp relativo al 4 agosto...
    Me ne sono accorto controllando i cookie

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

    Predefinito

    no, aspetta, se tu gli dici di salvare in un cookie una stringa, lui ci salva la stringa - non la analizza e converte in qualcos'altro. Insinuo dubbi sul tuo "accorgertene"... riprova

  5. #5
    Guest

    Predefinito

    Funziona! :P
    Posto la parte del codice da sostituire:

    Codice PHP:
    function controlla_cookie()
    {
    if (isset(
    $_COOKIE['data_visita']) && date("d")!=$_COOKIE['data_visita'])
    {
    setcookie('data_visita',date("d"),time()+86400);
    return
    true;
    } elseif (!isset(
    $_COOKIE['data_visita']))
    {
    setcookie('data_visita',date("d"),time()+86400);
    return
    true;
    } else
    return
    false;
    }
    Non capisco... eppure prima l'ho fatto e nel cookie c'era il timestamp
    e mi sa che non lo capiro mai xD
    comunque problema risolto, grazie

    EDIT: ho un altro problema, ho provato a dare un nome "dinamico" ai cookies in modo che il contatore potesse essere utilizzato, ma sembra non riconoscere le visite uniche,anche se prima funzionava!
    ecco il codice:

    Codice PHP:
    <?php
    // impostazioni di configurazione
    $contatore_unico = true; /* valori possibili: true,false impostano se il contatore contera i visitatori unici o le visualizzazioni */

    // non modificare nulla oltre questo punto
    $path_parts = pathinfo($_SERVER['PHP_SELF']);
    $nome_file = basename($path_parts['filename']).'.c.php';

    function
    controlla_cookie($nome_file)
    {
    if (isset(
    $_COOKIE[$nome_file]) && date("d")!=$_COOKIE[$nome_file])
    {
    setcookie($nome_file,date("d"),time()+86400);
    return
    true;
    } elseif (!isset(
    $_COOKIE[$nome_file]))
    {
    setcookie($nome_file,date("d"),time()+86400);
    return
    true;
    } else
    return
    false;
    }

    $warning = "";
    if (@!
    file_exists($nome_file) or @filesize($nome_file) == 0)
    {
    $handle = @fopen($nome_file,"w");
    if (
    $handle)
    {
    @
    fwrite($handle,'<?php|1|');
    @
    fclose($handle);
    $numero_visite = 1;
    } else {
    $warning = 'Impossibile Aprire il file in modalita scrittura. Controllare permessi';}
    } else
    {
    $contenuto = file_get_contents($nome_file);
    $arr = explode('|',$contenuto);
    if (
    $contatore_unico)
    {
    if (
    controlla_cookie($nome_file)) $somma = 1; else $somma = 0;
    } else
    $somma = 1;
    $handle = @fopen($nome_file,"w");
    if (
    $handle)
    {
    $nuovo_numero = ($arr[1]+$somma);
    @
    fwrite($handle,"<?php|$nuovo_numero|");
    @
    fclose($handle);
    $numero_visite = $nuovo_numero;
    } else {
    $warning = 'Impossibile Aprire il file in modalita scrittura. Controllare permessi';}
    }

    function
    contatore($numero_visite,$warning)
    {
    if (!@isset(
    $warning) or @empty($warning))
    echo
    "$numero_visite";
    else
    echo
    "<a href=\"#\" onClick=\"alert('$warning')\">Errore</a>";
    }


    contatore($numero_visite,$warning);
    ?>
    Ultima modifica di Dharlet : 04-08-2007 alle ore 20.34.46

Regole di scrittura

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