Problema Contatore

  • Creatore Discussione Creatore Discussione antolot
  • Data di inizio Data di inizio

antolot

Nuovo Utente
22 Nov 2007
23
0
0
Salve a tutti

ho un piccolo problema con un contatore, in pratica si incrementa ogni volta che effettuo il refresh della pagina, è possibile eliminare questa cosa?

Di seguito il codice:



if (!$hitsfile) $hitsfile = dirname(__FILE__)."/hits";
if (!$images) $images = dirname(__FILE__)."/images";
$images = str_replace($DOCUMENT_ROOT, "", $images);

$hits = file($hitsfile);
$hits = $hits[0] + 1;


# Opening the hits file and writing the number of hits:
$fp = fopen($hitsfile, "w");
fwrite($fp, $hits);

if ($invisible != "yes") {
# Text counter
if ($counterstyle == "text") {
echo $hits;
}

# Image counter
else {
$digit = strval($hits);
for ($i = 0; $i < strlen($hits); $i++) {
echo "<img src=$images/$digit[$i].gif height=$height width=$width alt=$hits>";
}
}
}
?>




Grazie e buon lavoro a tutti
 
Io vedrei due possibili soluzioni al tuo problema. La prima consiste nel salvare i qualche modo l'indirizzo IP del client ed incrementare il contatore solamente nel caso in cui l'IP non sia presente nella lista (nuovo utente) e riabilitare un particolare IP solamente dopo il trascorrere di un determinato periodo di tempo. Questa soluzione però ha degli inconvenienti in quanto escluderebbe dal conteggio un'intera categoria di client (quelli che accedono ad internet tramite dei proxy e quindi con uno stesso indirizzo IP) come ad esempio gli utenti Fastweb ed molti dipendenti aziendali.
L'altra soluzione è quella di utilizzare i cookie (però il browser client deve avere tale opzione abilitata). In questo modo basta incrementare il contatore e creare un cookie temporizzato al primo accesso da parte di un client ed incrementare il contatore le volte successive solamente se il cookie non è presente.
 
Grazie ma....

Ti ringrazio per la risposta, visto che non sono molto pratico, potresti indicarmi in che modo svolgere la tua seconda soluzione?

Ancora mille grazie
 
Ti posto questo codice minimale che potrebbe essere migliorato ad esempio con dei controlli aggiuntivi sulla possibilità o meno del browser del client di accettare i cookie ecc.

L'idea è quella di controllare se sulla macchina client sia impostato o meno un determinato cookie. Se esso non è impostato allora significa che si tratta di un nuovo utente che accede al sito per cui il contatore va incrementato e viene creato un cookie temporizzato (il valore di scadenza del cookie potrai deciderlo tu). La temporizzazione fa sì che in quell'arco di tempo il client venga riconosciuto e venga impedito l'incremento del contatore, questo per permettere na navigazione all'interno del sito da parte dell'utente stesso senza alcun incremento del contatore. Quando il cookie sarà scaduto (puoi impostare una temporizzazione adeguata alle tue esigenze, in termini di minuti o ore ecc.), il client verrà interpretato come un nuovo utente ed il contatore verrà nuovamente incrementato.

PHP:
<?php
        // Legge il cookie di nome CounterCookie
	@ $cookieValue = $_COOKIE['CounterCookie'];
	if (!isSet($cookieValue)) {
                // Il cookie non è impostato allora imposta il cookie e poi incrementa il contatore
		setcookie("CounterCookie", "true", time() + 10);
                // il valore del cookie "true" ed il tempo di scadenza 10 secondi vanno modificati in base alle proprie esigenze.

                ....

	}
?>
 
Chiedo scusa per la mia ignoranza, se lo inserisco così non mi visualizza più il contatore



$hits = file($hitsfile);

$cookieValue = $_COOKIE['CounterCookie'];

if (!isSet($cookieValue))
{
$hits = $hits[0] + 1;
setcookie("CounterCookie", "true", time() + 3600);

}



dov'è che sbaglio??

grazie grazie
 
Ciao, in base al codice del counter da te postato, potresti provare a fare una cosa del genere:

PHP:
<?php

    if (!$hitsfile) $hitsfile = dirname(__FILE__)."/hits";
    if (!$images) $images = dirname(__FILE__)."/images";
	
    $images = str_replace($DOCUMENT_ROOT, "", $images);

    $hits = file($hitsfile);

    $cookieValue = $_COOKIE['CounterCookie'];
    if (!isSet($cookieValue)) {
        $hits = $hits[0] + 1;
        setcookie("CounterCookie", "true", time() + 3600);
    }

    # Opening the hits file and writing the number of hits:
    $fp = fopen($hitsfile, "w");
    fwrite($fp, $hits);

    if ($invisible != "yes") {
        # Text counter
        if ($counterstyle == "text") {
            echo $hits;
        }

        # Image counter
        else {
            $digit = strval($hits);
            for ($i = 0; $i < strlen($hits); $i++) {
                echo "<img src=$images/$digit[$i].gif height=$height width=$width alt=$hits>";
            }
        }
    }

?>
 
Ultima modifica:
ciao, puoi usare anche il referer cosi da evitare che segni una visita per ogni pagina visitata.
 

Discussioni simili