Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Counter e Fput

  1. #1

    Counter e Fput

    Semplice counter, uno dei piu banali ma vorrei ke il contatore non si incrementi se si ha lo stesso ip, quindi faccio cosi:

    $COUNT_FILE = "counter.dat";

    if (file_exists($COUNT_FILE)) {
    $fp = fopen("$COUNT_FILE", "r+");
    flock($fp, 1);
    $count = fgets($fp, 4096);
    $count += 1;
    fseek($fp,0);
    fputs($fp, $count);
    }
    flock($fp, 3);
    fclose($fp);
    }
    return $count;
    }

    ovviamente in questo caso, avendo un file counter.dat avro soo il numero di accessi successivi. Io vorrei anke poter escludere lo stesso ip senza incrementare il contatore avevo pensato:

    $COUNT_FILE = "counter.dat";

    if (file_exists($COUNT_FILE)) {
    $fp = fopen("$COUNT_FILE", "r+");
    flock($fp, 1);
    $count = fgets($fp, 4096);
    // il mio problema ora e far capire che deve leggere al secondo rigo e non al primo
    $ip = fgets($fp, 4096);
    if($ip!=$_SERVER['REMOTE_ADDR'] ){
    $count += 1;
    fseek($fp,0);
    fputs($fp, $count);
    // il mio problema ora e far capire che deve scrivere al secondo rigo e non al primo
    fseek($fp,0);
    fputs($fp, $ip);

    }
    flock($fp, 3);
    fclose($fp);
    }
    return $count;
    }

    ovviamente il file counter sara del tipo :

    0
    156.26.25.254

    Come posso fare?
    devo utilizzare un explode e un implode per inserire tutto in un array e controllare?

    0//156.25.25.254

  2. #2
    se ho capito il tuo problema (la prossima volta spiega il tuo problema a arole, e dopo metti anche il codice se necessario.. magari solo la parte interessata)....

    usa file() per aprire il file con gli ip, e ti ritrovi un array con un elemento per ogni riga del file... a quel punto usi inarray() per verificare se l'ip è contenuto nel file.

    NOta bene che devi utilizzare un meccanismo di garbage collection sul file degli ip... o continuerai a non conteggiare per sempre i primi ip....
    dovresti fare una coppia ip|data e non considerare gli ip che hanno una certa data... e ogni tanto troncare il file o qcancellare in altro modo gli ip più vecchi


  3. #3
    scusa ma non posso copiare in un array nella prima posizione il contatore e nella seconda l'ip?

    dopo di ke non faccio altro ke incrementare il contatore se l'ip ke attualmente ho è diverso da quello copiato nell'array altrimenti copio quello attuale nell'array in seconda posizione facendolo ricopiare sul file di origine.

    Questa era la mia idea.

    Puoi modificarmi il codice cosi da capire come intendevi se non è troppo impegnativo per te?

  4. #4
    scusa... di codice parliamo dopo... è la tua logica che mi sfugge...


    tu hai su un unico file il contatore e UN ip?

    che te ne fai di un solo ip?

  5. #5
    La logica?

    :-)

    semplice, per non incrementare il contatore se ad accedergli è sempre alla stessa persona.

    Tipo: se io accedo al sito www.mio.it e visito 70 pagine non è corretto che incrementi 70 volte.Tutto questo perkè io ho un index unico e faccio tanti include (pag.php) per cambiare la pagine al suo interno in modo da non dovere avere tante pagine divverse ogni volta.

    In ogni caso ho modificato il codice e mi funziona.

    La trovi una cosa corretta fare un unica index e fare tanti include?
    Tra include require e require_once
    che differenza c'è?

  6. #6
    Ho appena finito di scrivere il post precedente e mi sono reso conto di una cosa.

    Tu sottolinei UN ip perke ovvimante in un sito potrebbero esserci 300 persone per volata e quinidi il mio ragionamento non funzionerebbe.

    Dovrei fare un ip.txt dove raccogliere per ogni utente collegato il suo ip e confrontali tutti ogni volta in una data specifica sela data è diversa da quella di oggi modifico altrimenti non incremento.
    Ma poi di quanto dovrei farlo grande l'arrey?Dovrei farlo pulire ogni giorno?

  7. #7
    Originariamente inviato da devilchan
    Ho appena finito di scrivere il post precedente e mi sono reso conto di una cosa.

    Tu sottolinei UN ip perke ovvimante in un sito potrebbero esserci 300 persone per volata e quinidi il mio ragionamento non funzionerebbe.

    Dovrei fare un ip.txt dove raccogliere per ogni utente collegato il suo ip e confrontali tutti ogni volta in una data specifica sela data è diversa da quella di oggi modifico altrimenti non incremento.
    Ma poi di quanto dovrei farlo grande l'arrey?Dovrei farlo pulire ogni giorno?
    appunto... per quetso parlavo di logica e non di codice... ^_^

    il punto sta proprio nella questione dell'ip che deve valere solo per un certo tempo.. altrimenti indefinitivamente quell'ip non sarà contegiato..
    una soluzione potrebbe essere mettre ip e date in modo ordinato (ovvero gli ultimi accessi sempre in testa) per cui una volta arrivato ad accessi che anno più di tot ore il resto del file manco lo controlli.. e lo tronchi in quel punto.

    Sul come farlo... ci sono tanti modi.. ad esempio leggendoti e scorrendoti il file e poi riscrivendolo da capo con solo i primi x valori che sono quelli più recenti di un tot...

    certo che fare così ogni volta... :\

  8. #8
    vedo ke non ti piace fare in questo modo,

    quindi tu cosa faresti?

    Ma poi ogni utente avra diritto a scrivere il suo ip nel file, ip che successivamente sarà controlalto per verificare se è sempre la stessa persona ad entrare ne sito nella stessa giornata, ma potrebbe anke essere (un caso) ke nella giornata due persone ke accedono allo stesso sito abbiano lo stesso ip per quanto esso sia distribuito dinamicamente e in un modo del tutto random almeno per le ultime 6 cifre.Quindi ke dovrei fare, controllare anke il nome dell'Host?o c'e un altro paramentro che identifica un macchina?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.