Visualizzazione risultati 1 fino 17 di 17

Discussione: Conteggio dei CLICK

  1. #1
    Guest

    Predefinito

    Questo è un semplice script che uso per il conteggio dei clicks.
    E' molto comodo, perchè oltre a conteggiarmi i clicks, mi permette di modificare in un colpo solo il nome di una pagina collegata, senza dover modificare tutti i links di tutte le pagine che puntano ad essa.
    Ecco lo scriptino:
    Citazione Originalmente inviato da go.php
    <?php
    if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
    $id = $_GET['id'];

    switch($id){
    case 1: $url = 'index.php';
    break;
    case 2: $url = 'strumenti.php';
    break;
    case 3: $url = 'download.php';
    break;
    }
    $nome_file = date("Ym") . ".csv";

    // Provo ad aprire il file
    if (!file_exists($nome_file)) { // Se non esiste lo creo vuoto
    $fp = @fopen($nome_file, "w");
    @fclose($fp);
    }
    if ($fp = fopen($nome_file, "a")) {

    // Ok, allora costruisco la riga da inserire nel file
    // Uso il TAB (\t) come separatore dei campi

    // Come primo campo inserisco la url scelta
    $riga = $url . "\t";

    // A seguire, data e ora...
    $riga .= date("d/m/Y H:i") . "\t";

    // ... qualche informazione su chi ha cliccato ...
    $riga .= "$REMOTE_HOST ($REMOTE_ADDR)\t";

    // ... e sul suo browser
    $riga .= "$HTTP_USER_AGENT\n";

    // Stavolta ho terminato con \n (la riga e' finita)

    @fwrite($fp, $riga); fclose($fp);
    }

    // A questo punto non resta che l'ultimo passo:
    // il 'redirect' (dirottamento) del client
    Header("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST']
    .dirname($HTTP_SERVER_VARS['PHP_SELF'])
    ."/$url");
    ?>
    Lo si applica così, dopo averlo messo nella stessa cartella degli altri files, costruite un link in una pagina anche html: <a href="go.php?id=1">home page</a>
    In questo modo per aggiungere altre pagine, dovete aprire go.php e aggiungerle allo switch, per vedere il file di staistica, basta che vi colleghiate al suo url, in fondo è un file di testo, si chiama con la data del mese.csv così: 200302.csv

  2. #2
    Guest

    Predefinito

    Simile a quello che ho scritto io, pero' il mio non memorizza informazioni sulla connessione, solo pagina e numero di accessi.

    Lo sto ancora modificando quindi non posto niente...

    Vedo che tu hai dovuto inserire i nomi delle pagine "monitorate" nello switch, io faccio riferimento alla variabile $page che viene chiamata tutte le volte:

    cod.altervista.org/Main.php?page=pagina&lang=it

    e nel codice del contatore mi limito a cercare la linea corrispondente al nome della pagina e ad aggiungere 1 agli accessi.

    Cosi' il codice non deve essere modificato e se voglio monitorare un'altra pagina mi basta includere il file del contatore con PHP.

    Per chi scrive delle pagine separate (e non delle sottopagine come nel mio caso) si portebbe usare $PHP_SELF.

    Che ne dici? ???

  3. #3
    Guest

    Predefinito

    Ci sono dei piccoli problemi legati alla sicurezza con il tuo metodo.
    Certo potevo passare una stringa tipo go.php?id=home e poi a parte aggiungere l'estensione e quindi "lanciarla", ma con il metodo switch, anche se apparentemente più comlesso, implemento un certo grado di sicurezza, ovvero pochi capirebbero che ad esempio go.php?id=450023 potrebbe essere associata proprio all'home page, e più fai lunga la stringa e più è difficile ricordarla.
    Ovvio che è poco per la sicurezza, basterebbe guardare il codice sorgente del menù per capire a cosa punta, ma è un inizio.
    &PHP_SELF va bene se implementi il metodo su tutte le pagine, magari includendo il file go.php nella stessa pagina dove sono i link, in modo da non dover riscrivere ogni volta lo stesso codice.
    Ho preferito eliminare ciò per non allungare la pagina da caricare ogni volta, e quindi realizzare il tutto in un file esterno.

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da sugandbibi
    Ci sono dei piccoli problemi legati alla sicurezza con il tuo metodo.
    ...
    Ovvio che è poco per la sicurezza, basterebbe guardare il codice sorgente del menù per capire a cosa punta, ma è un inizio.
    Si', e' vero, su questo siamo d'accordo!

    &PHP_SELF va bene se implementi il metodo su tutte le pagine, magari includendo il file go.php nella stessa pagina dove sono i link, in modo da non dover riscrivere ogni volta lo stesso codice.
    Ho preferito eliminare ciò per non allungare la pagina da caricare ogni volta, e quindi realizzare il tutto in un file esterno.
    Questa invece non l'ho proprio capita...

    nel codice del contatore io metto:

    [code:1:d56c001eb1]
    (pseudocodice)

    $NomePagina = $PHP_SELF;
    Carica questomese.cnt;
    Separa i campi $pagina e $numerovisite;
    Finche' $pagina non e' uguale a $NomePagina {
    pagina successiva;
    }

    Se sei arrivato in fondo aggiungi $NomePagina e $numerovisite=0 all'array;

    $numerovisite++;

    Unisci l'array $pagine/$numerovisite;

    scrivi tutto e chiudi il file questomese.cnt;
    [/code:1:d56c001eb1]

    In che senso dovrei implementare il contatore in tutte le pagine?

    Se mi interessa monitorare una pagina basta includere "contatore.php", altrimenti niente.

    Dici che il codice della pagina diventa eccessivamente lungo ???

    Forse pensavi che il contatore fosse in Main.php! (errore mio , non mi sono spiegato bene: e' un file esterno!)

    Quello che intendevo e' che io posso usare la variabile $page che passo a Main.php, ma chi scrive pagine separate dovrebbe usare $PHP_SELF.



    Scusa se ti bersaglio di domande: ma vorrei capire e... migliorare

    e scusa lo pseudocodice ma sono terribilmente di fretta...

  5. #5
    Guest

    Predefinito

    metto l'argomento come importante, vi dirò di più, se vengono postati più spesso questi tipi di "suggerimenti" in php si potrebbe organizzare una "pagina pillole" con linkate la maggior parte di queste spiegazioni

    (TECNICAMENTE:
    l'area How to dovrebbe contenere solo guide e tutorial di questo tipo... )

  6. #6
    Guest

    Predefinito

    Eccomi qua!!

    Oggi ho un po' piu' di tempo quindi pensavo di postare il codice del contatore.

    Ero in dubbio se postarlo e rendere questo forum piu' "pieno" o linkare un file sul mio sito, ma siccome i file scompaiono mentre i messaggi restano un po' piu' a lungo, ho deciso di seguire la prima strada.

    Metto anche il codice di un "visualizzatore" per questo Contatore.

    Quindi preparatevi ad un post lunghetto

    Ecco il codice del Contatore (purtroppo con l'a capo automatico non si capisce molto :x ):

    [code:1:f808a3635c]
    <?php
    /*
    --------------------------------------------------------------------------------
    CONTATORE DI ACCESSI PER PAGINE PHP
    Master of Darkness
    Crescent of darkness 2003
    --------------------------------------------------------------------------------
    Per attivare il conteggio degli accessi basta includere questo file
    nella pagina desiderata.

    Il Contatore generera' un file chiamato: numeromese.mon (dove numeromese e' il
    numero del mese corrente nel formato 1-12) nella cartella specificata dalla
    constante CARTELLA.

    Il file generato ha il seguente formato:

    -
    # Crescent of Darkness Web Counter #
    nomepagina -> numeroaccessi
    nomepagina -> numeroaccessi
    ...
    nomepagina -> numeroaccessi
    -

    dove:

    nomepagina e' il percorso completo della pagina
    -> e' una tabulazione
    numeroaccessi e' un intero

    */



    // Definizione della cartella in cui verranno generati i file di monitoraggio.
    // Non dimenticate il / alla fine!
    define("CARTELLA", "./Contatore/");


    // Imposto il nome della pagina corrente e il nome completo del file di monitoraggio.
    $questapagina = $PHP_SELF;
    $filecontatore = CARTELLA.(date ("n")).".mon";


    // Cerco il file di monitoraggio.
    if (!file_exists($filecontatore))&#12 3;

    // Non lo trovo, quindi lo creo.
    $fpointer = @fopen($filecontatore,"w");

    // Aggiungo la prima riga.
    // E' essenziale che questa riga ci sia, ma puo' esserci scritta
    // qualunque cosa: personalizzatela a vostro piacimento ma lasciate \n in fondo!
    @fwrite($fpointer,"# Crescent of Darkness Web Counter #\n");

    @fclose($fpointer);
    }

    // Carico il file di questo mese.
    $linea = @file($filecontatore);

    // $numerolinea memorizza il numero della linea corrispondente a questa pagina
    // all'interno del file di monitoraggio.
    $numerolinea=0;

    // Cerco il nome della pagina corrente all'interno del file di monitoraggio.
    for ($i=0; $i<=count($linea)-1; $i++) {

    // Separo nome e numero accessi.
    $elemento = explode("\t",$linea[$i]) ;

    //Controllo se questa e' la linea giusta.
    if ($elemento[0] == $questapagina) {

    //Si': e' la linea giusta. Mi segno il numero in $numerolinea.
    $numerolinea = $i;
    }
    }


    if ($numerolinea == 0) {
    // Se non e' stata trovata la linea corrispondente a questa pagina mi
    // preparo a crearne un'altra.

    // Imposto il nome della pagina.
    $elemento[0]= $questapagina;

    // Imposto le visite a 1 (e' la prima volta di sicuro: non ho trovato questa
    // pagina nel file di monitoraggio).
    $elemento[1] = 1;

    // Imposto il numero della linea a +1 rispetto all'ultima, cosi' verra' creata
    // una nuova linea.
    $numerolinea = count($linea);

    } else {

    // Se invece ho trovato il numero della linea corrispondente a questa pagina.

    // Tolgo il carattere di ritorno a capo dall'elemento "numero accessi".
    $elemento[1] = chop($elemento[1]);

    // Lo incremento di 1.
    $elemento[1]++;

    }


    // Ricostruisco la linea unendo i due elementi ("nome pagina" e "numero accessi")
    // separandoli con una tabulazione ed inserendo un ritorno a capo alla fine.
    // Se in $numerolinea c'e' un numero maggiore di 1 al numero delle linee effettivamente
    // presenti nel file, verra' creata una nuova linea, altrimenti verra' modificata
    // quella attuale.
    $linea[$numerolinea] = $elemento[0]."\t".$elemento[ 1]."\n";

    // Scrivo il file di monitoraggio dall'inizio alla fine.
    $fpointer = @fopen($filecontatore,"w");

    for ($a=0; $a<=count($linea)-1; $a++) {
    @fwrite($fpointer,$linea[$a]);
    }

    @fclose($fpointer);

    ?>
    [/code:1:f808a3635c]


    Ed ecco quello del Visualizzatore:

    [code:1:f808a3635c]
    <?php
    /*
    --------------------------------------------------------------------------------
    SOMMARIO DEL CONTATORE DI ACCESSI PER PAGINE PHP
    Master of Darkness
    Crescent of darkness 2003
    --------------------------------------------------------------------------------
    Questo script genera una tabella riassuntiva degli accessi monitorati con il contatore
    di accessi di C.o.D.

    La constante CARTELLA specifica il percorso dei file di monitoraggio e deve essere
    impostata in maniera uguale alla costante omonima nello script del contatore.

    Per facilitare la personalizzazione dell'output, tutte le istruzioni che generano i tag
    HTML sono state inserite nella funzione OutputVal.
    */



    function OutputVal($tipo,$testo) {
    /*
    Questa funzione regola l'emissione di Output.
    A seconda di $tipo viene emesso il tag corrispondente.
    Ho preferito non inserire il testo da emettere anche se in alcuni casi
    (come i titoli delle colonne) risultava sempre lo stesso. Questo perche' questa
    funzione e' qui solo per regolare lo "stile" dell'output, per cambiare le singole
    stringhe emesse dovete guardare nel codice piu' sotto.
    */
    switch ($tipo) {
    case "iniziatabella":
    echo "<br>\n";
    echo "<table>\n";
    break;
    case "mese":
    echo "<tr>\n";
    echo " <td colspan=2>\n";
    echo " <b>$testo</b>\n";
    echo " </td>\n";
    echo "</tr>\n";
    break;
    case "vuoto":
    echo "<tr>\n";
    echo " <td colspan=2>\n";;
    echo " <b>$testo</b>\n";
    echo " </td>\n";
    echo "</tr>\n";
    break;
    case "nomecolonna1":
    // Scrivo il titolo "pagina"
    echo "<tr>\n";
    echo " <td WIDTH=50%>\n";
    echo " <b>$testo</b>\n";
    echo " </td>\n";
    break;
    case "nomecolonna2":
    // Scrivo il titolo "numero accessi"
    echo " <td WIDTH=50%>\n";
    echo " <b>$testo</b>\n";
    echo " </td>\n";
    echo "</tr>\n";
    break;
    case "nomepagina":
    // Scrivo il nome della pagina
    echo "<tr>\n";
    echo " <td>\n";
    echo " $testo\n";
    echo " </td>\n";
    break;
    case "numeroaccessi":
    // Scrivo il numero degli accessi
    echo " <td>\n";
    echo " $testo\n";
    echo " </td>\n";
    echo " </tr>\n";
    break;
    case "terminatabella":
    echo "</table>\n";
    echo "<br>\n";
    break;
    }
    }


    // Definizione della cartella in cui verranno generati i file di monitoraggio.
    // Non dimenticate il / alla fine!
    define("CARTELLA", "./Contatore/");

    // Imposto i parametri locali per avere i nomi dei mesi in italiano
    setlocale ("LC_TIME", "it_IT");

    // Per ogni mese da Gennaio a quello corrente
    for ($mese=1; $mese<=date ("n"); $mese++) {

    // Inizio una nuova tabella
    OutputVal ("iniziatabella",""&#41 ;;

    // Inserisco il nome del mese come titolo della tabella
    $nomemese = strftime ("%B", mktime (0,0,0,$mese));
    OutputVal ("mese",$nomemese);

    // Cerco il file di monitoraggio.
    $filecontatore = CARTELLA.$mese.".mon";
    if (!file_exists($filecontatore))&#12 3;

    // Non lo trovo per cui scrivo che non c'e'
    OutputVal ("vuoto"," - nessun file per questo mese -");

    } else {

    // Lo trovo e scrivo i titoli delle colonne
    OutputVal ("nomecolonna1","Nome Pagina");
    OutputVal ("nomecolonna2","Numero accessi");
    }

    // Carico il file del mese.
    $linea = @file($filecontatore);

    // Elenco le pagine saltando la prima riga del file
    for ($i=1; $i<=count($linea)-1; $i++) {

    // Separo nome e numero accessi.
    $elemento = explode("\t",$linea[$i]) ;

    // Scrivo il nome della pagina eliminando il / iniziale
    OutputVal ("nomepagina",substr ($elemento[0], 1));

    // Scrivo il numero degli accessi
    OutputVal ("numeroaccessi",$elemento[1&#93 ;);
    }

    // Termino la tabella corrente
    OutputVal ("terminatabella",""&#4 1;;

    }


    ?>
    [/code:1:f808a3635c]

    Sto lavorando anche ad altri due tipi di contatori: uno che memorizzi i dati in formato:
    pagina mese1 mese2 mese3 ... mese12
    che renderebbe piu' semplice una valutazione statistica degli accessi

    e un'altro come questo ma con la possibilita' di "splittare" il conteggio di un mese, utile, ad esempio, se avete fatto una nuova versione di una pagina e volete sapere quante persone l'hanno vista senza perdere il conteggio dei visitatori precedenti, qualcosa tipo:

    Gennaio
    pagina1 30 visite
    - split: dal 20 gennaio -
    pagina1 15 visite

    Quando avro' finito faro' una sezione "script" nel mio sito, cosi' evito di fare post kilometrici


    Commenti, critiche, suggermenti e torte in faccia sono sempre i benvenuti !

  7. #7
    Guest

    Predefinito

    "lunghetto", ma è enorme sto post!!!!!

    cmq, si potrebbe fare una sottosezione pillole giàche ci siamo e nel caso ci sia della roba che nn va bene si sposta no?

    ma scusate una domanda: se i link li si fa ricavare dal database, si può aggiungere un campo alla tabella che ogni volta che ci clicchi sopra passa per una pagina che ricava il valore, lo incrementa e fa l'update.
    un po' più semplice che con un file di testo no? anche perchè così non si ha il problema di dover implementare lo switch.

    o non ho capito niet?

    SYME

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da eva04
    "lunghetto", ma è enorme sto post!!!!!


    Se ho capito quello che vuoi dire e' qualcosa del tipo:

    Home pagina contatore pagina richiesta dall'utente

    E' vero, si puo' fare, ma non e' poi tanto piu' corto e poi il database non lo hanno tutti.

    Questo funziona sempre.

    I cari vecchi file TXT: il tempo passa ma sono empre i migliori :D !

  9. #9
    Guest

    Predefinito

    già, i vecchi txt, il problema è che poi rischi di morire affogato tra i txt!

    no, cmq, va bene, allora per potere automatizzare anche lo switch si può fare un txt parallelo a quello dei click con sopra gli url su cui redirectare (oppure un php così cìè anche la sicurezza) in pratica si crea un array e si fa un ciclo che genera le opzioni dello switch!
    geniale e nn troppo complicato, no? :D

    SYME

  10. #10
    Guest

    Predefinito

    Non ti seguo piu' ??? :(

    L'unico switch che ho messo e' nella pagina di visualizzazione e quella serve solo al webmaster.

    Per il resto a che servono i redirect? Basta inserire un

    <?php include('contatore.inc') ?>

    all'inizio della pagina che vuoi monitorare e il gioco e' fatto.

    Cosa intendevi?

    :D

  11. #11
    Guest

    Predefinito

    eh..a...um...h..a...ehm........

    vabbè, lasciamo stare


    :

  12. #12
    Guest

    Predefinito

    Alla fine vien fuori che il mio codice era meglio? ;)
    W la semplicità.

  13. #13
    Guest

    Predefinito

    heilà bentornato, si, cmq credo che il migliore sia il tuo.

  14. #14
    Guest

    Predefinito

    Devo ammettere che il codice che avevo messo in questo post me lo ero completamente dimenticato... ora uso un contatore un po' diverso, piu' veloce e con una funzione invece che con un semplice include.

    Preferisco definire una funzione e passargli il nome della pagina (tipo countAccess('Home Page') ) perche' in questo modo le variabili dichiarate nel contatore rimangono tutte locali e si evitano casini; dopotutto non si sa mai in che tipo di pagine debba finire... meglio tutelarsi .

    Appena ho finito il restyling del sito lo metto a disposizione di chiunque voglia scaricarselo, nel frattempo chiunque ne abbia bisogno urgente puo' spedirmi un mp. Ricordo a tutti che il mio contatore CONTA ANCHE I REFRESH, per quello piu' avanzato dovrete aspettare che abbia il tempo (e -ehm- la voglia) per scriverlo.

    Ciao ciao :D

  15. #15
    Guest

    Predefinito

    Da notare che neanche io uso più quel codice, ma l'ho abbastanza modificato integrandolo in una pagina singola, che non includo affatto nel codice di una pagina ma richiamandola attraverso il link, una cosa tipo: go.php?id=1 dove go.php è la pagina che contiene il contatore ma che allo stesso tempo mi funge da reindirizzatore al link richiamato proprio da id=1 dove 1 corrisponde alla posizione nell'array, della pagina da raggiungere.

  16. #16
    GuanoApe non è connesso Neofita
    Data registrazione
    08-01-2004
    Messaggi
    6

    Predefinito

    Questo mi sembra un pochino meglio (Sempre che il DBMS funzioni e che sia veramente possibile attivare MySQL per PIù di 30 giorni......?!?)

    P.S. Io non riesco a guadagnare AC....

    <?php
    if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
    $ps = $_GET['ps'];
    $connessione = mysql_connect("localhost", "tuonick", "tuaPSW")
    or die("nC");
    mysql_select_db("my_nick")
    or die("sDB");
    $query = "INSERT INTO tuaTAB VALUES ("+$_SERVER['REMOTE_ADDR']+", "+time()+", "+$ps+");";
    $risultato = mysql_query($query);
    echo $risultato;
    mysql_free_result($risultato);
    $query = "select * from tuaTAB;";
    $risultato = mysql_query($query)
    or die("fQ");
    echo $risultato;
    mysql_free_result($risultato);
    mysql_close($connessione);
    ?>

  17. #17
    GuanoApe non è connesso Neofita
    Data registrazione
    08-01-2004
    Messaggi
    6

    Predefinito

    Scusate, questa è la versione più corretta!!!!

    <?php
    if ($CVLCook==null) setcookie("CVLCook",mt_rand(),0);
    if(!isset($_GET)) $_GET = $HTTP_GET_VARS;
    $pos = $_GET['pos'];
    $connessione = mysql_connect("localhost", "nick", "pswd")
    or die("st=nC");
    mysql_select_db("my_nick")
    or die("st=sDB");
    $query = "INSERT INTO tuaTab VALUES ('";
    $query .= $_SERVER['REMOTE_ADDR'];
    $query .= "', ";
    $query .= time();
    $query .= ", '";
    $query .= $pos;
    $query .= "', ";
    $query .= $CVLCook;
    $query .= ");";
    $risultato = mysql_query($query);
    echo $risultato;
    mysql_free_result($risultato);
    mysql_close($connessione);

Regole di scrittura

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