• User Attivo

    Problema calcolo visite con PHP e MYSQL

    Buongiorno a tutti,
    innanzitutto mi scuso con i moderatori nel caso in cui avessi sbagliato sezione, ma dopo aver visionato tutti i luoghi del forum questa mi è sembrata la categoria più inerente.

    Comunque non voglio perdermi in chiacchiere e arrivo subito al motivo per cui sto scrivendo in questo forum.
    Io sto creando un progetto Paid To Write in cui la gente, creandosi un blog sul mio portale, può pubblicare articoli e guadagnare attraverso le visite Adsense che riesce a generare.
    Ho creato un sistema molto organizzato in cui le percentuali delle visite sono organizzate in modo da permettere di guadagnare tutti: autore dell'articolo, traduttori, scrittori, sponsor, condivisori, io.
    Per fare questo quindi potete immaginare che devo calcolare esattamente le visualizzazioni che i vari articoli ricevono perchè dopo ad esempio 8 visualizzazioni dell'articolo in cui sono mostrati i banner dell'autore, alla nona visita vengono mostrati i banner del suo sponsor e alla decima i miei banner, salvo poi riniziare a contare le 8 visualizzazioni dell'autore e così via.

    Questo sistema di calcolo l'ho già correttamente creato e funziona perfettamente, il mio problema è però nel conteggio delle visite!
    Ho creato una tabella in Mysql in cui, al caricamento di ogni articolo, vengono inviati i dati estrapolati (IP, id_articolo e data).
    Il tutto è molto semplice ma è proprio qua che nasce il rompicapo!!!
    A volte infatti vengono inseriti nella tabella degli IP che non centrano niente con il visitatore (Facebook, Yahoo, Google, Microsoft, ecc...) e a volte vengono anche salvati 2 o 3 volte gli stessi IP (nell'arco di un secondo) che non possono corrispondere ad un refresh volontario dello stesso utente.
    Come potete intuire, queste visite "false" vanno a sballare il conteggio delle visualizzazioni che poi sono quelle che permettono di calcolare quale banner Adsense andare a mostrare nell'articolo.

    Se vi interessa questo è il codice che utilizzo per il salvataggio delle visualizzazioni:

    function ipCheck() {
            if (getenv('HTTP_CLIENT_IP')) {
                $ip = getenv('HTTP_CLIENT_IP');
            }
            elseif (getenv('HTTP_X_FORWARDED_FOR')) {
                $ip = getenv('HTTP_X_FORWARDED_FOR');
            }
            elseif (getenv('HTTP_X_FORWARDED')) {
                $ip = getenv('HTTP_X_FORWARDED');
            }
            elseif (getenv('HTTP_FORWARDED_FOR')) {
                $ip = getenv('HTTP_FORWARDED_FOR');
            }
            elseif (getenv('HTTP_FORWARDED')) {
                $ip = getenv('HTTP_FORWARDED');
            }
            else {
                $ip = $_SERVER['REMOTE_ADDR'];
            }
            return $ip;
        }
    $ip_visitatore = ipCheck();    
    $inserisci_visualizzazione=mysql_query("INSERT INTO visualizzazioni (id_articolo, ip, data, mobile) VALUES ('$id_articolo', '$ip_visitatore', now(), '0')");
    
    

    Come vedete, pensando che fosse un problema di visualizzare gli IP, ho utilizzato uno dei codici più completi che ho trovato in internet sperando che risolvesse il problema e calcolasse solo l'IP dell'utente.... ma niente!

    C'è qualche anima pia che potesse darmi informazioni in merito? Sono abbastanza preoccupato perchè il sito l'ho ormai terminato, ma se questo problema persiste sono costretto a chiudere tutto dopo 3 mesi di lavoro!!!
    Spero in una risposta risolutrice (anche brutta da vedere, ma funzionale!),
    Piero


  • Moderatore

    Ciao Piero,
    il problema è dato dagli spider dei motori di ricerca che visitano il tuo sito per indicizzarlo.
    Non devi far altro che cercare in internet qualcosa che ti permetta di riconoscerli per poterli saltare nei conteggi.

    Non ho nulla sotto mano da poterti passare, ma sono convinto che una ricerca possa risolvere il tuo problema.

    Fammi sapere.


  • User Attivo

    Grazie Shad per la risposta.
    Ovviamente quando leggendo gli intestatari degli IP ho scoperto che erano quei servizi, ho creato una tabella di blacklist in cui ho inserito gli indirizzi che ho osservato: ma hanno IP dinamici ed è un lavoraccio star li a mano inserirli ogni volta!
    Ovviamente oggi sto tutto il giorno al PC ad approfondire la cosa, ma dato che sono già 2 giorni che lo faccio ininterrottamente ho voluto provare a chiedere a voi che magari qualcuno ci era già passato! 😉
    Grazie per la risposta comunque, molto apprezzata!


  • Moderatore

    Figurati, siamo qui per cercare di aiutare.
    Comunque fai la ricerca lo stesso. Potresti trovare qualche database di IP con la tua blacklist già pronta.


  • User Attivo

    Shad, facendo ricerche più mirate ho trovato su un articolo inglese gli IP dei principali bot, crawler e spider che ho inserito nella blacklist e, dopo qualche piccola prova, sembrano non dare problemi.
    Per questo primo (ma utilissimo!) aiuto ti devo ringraziare enormemente, è una soluzione un po' casereccia credo, ma poco importa!!!

    Per la questione invece delle **visite doppie o triple da parte dello stesso ip in meno di un secondo **hai qualche idea in merito? Io pensavo che potesse essere per il reindirizzamento mobile, ho sistemato la cosa mettendo una condizione sulla pagina precedente, ma non ha cambiato la situazione!
    Sperando in una tua illuminazione come fatto precedentemente, ti ringrazio ancora e ti saluto.
    Piero


  • Moderatore

    Non saprei da cosa possa dipendere il conteggio dopo meno di un secondo dello stesso ip.
    Verosimilmente si tratta, come hai giustamente pensato tu, di qualche redirect o automatismo interno al sito. Ad esempio se ricarichi la pagina a causa della cookie law nel momento in cui l'utente inizia a scrollarla come fanno alcuni, potrebbe essere la causa del problema.

    Per aggirarlo, indipendentemente dal motivo della disfunzione, mi vengono in mente due soluzioni:

    1. marchi nel database anche l'orario della visita e non conti un altro accesso a meno che la differenza con il precedente non sia di 3 secondi
    2. stesso principio ma utilizzando i cookie

    Se mi vengono in mente altre cose ti faccio sapere.


  • User Attivo

    Ciao @Shad, ti ringrazio enormemente perchè a distanza di qualche settimana di test il codice funziona abbastanza bene e sono scomparse le differenze che segnalavo precedentemente.
    Come hai inoltre suggerito nel tuo ultimo commento, ho anche inserito un breve script in Java che salva il click della Cookies Law senza che la pagina venga ricaricata per intero, in questo modo così, oltre a contare solo una visita reale, sono anche a norma al 100% con il regolamento Adsense che non ammette refresh di pagina dove sono esposti i banner.
    Volevo quindi ringraziarti enormemente per l'aiuto che mi hai offerto!
    Piero


  • Moderatore

    Grazie Piero,
    mi fa piacere essere stato d'aiuto. E' sempre un enorme piacere leggere commenti come il tuo e sapere di essere riusciti a rendersi utili.

    Resto a disposizione qualora servisse altro supporto.
    Saluti
    Shad