Visualizzazione risultati 1 fino 2 di 2

Discussione: [PHP] Utenti collegati, check tramite IP

  1. #1
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito [PHP] Utenti collegati, check tramite IP

    Salve amici, oggi sono qui per illustrarvi un semplicissimo script, facile all'uso e all'installazione!
    Lo script di cui voglio parlarvi è uno script che segna gli utenti collegati tramite il controllo degli indirizzi ip che salva su file di testo.
    Quindi niente SQL.
    Per cominciare vi mostro il codice:
    Codice PHP:
    <?
    #CLASSI.PHP BY PEO (SCRIPT_PRESENZE OPEN SOURCE) http://leo91.altervista.org
    class Ospite{
    function
    Aggiorna(){//Funzione che serve ogni volta che l'ospite fa qualcosa. Aggiorna il suo dato di vita
    $ip = $_SERVER['REMOTE_ADDR'];
    $file = file("logged.txt");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[0] == $ip) {
    $w[] = "$ip|".(time()+120)."|\n";
    }else{
    $w[] = $rigo;
    }
    }
    $ok = implode("",$w);
    $fp = fopen("logged.txt","w+");
    fwrite($fp,$ok);
    fclose($fp);
    }
    function
    Guarda(){//Funzione di controllo che serve alla funzione seguente
    $ip = $_SERVER['REMOTE_ADDR'];
    $file = file("logged.txt");
    foreach(
    $file as $rigo){
    $ex = explode("|",$rigo);
    if(
    $ex[0] == $ip) {
    return
    "falso";
    }
    }
    }
    function
    Inserisci(){
    $ip = $_SERVER['REMOTE_ADDR'];
    $pro = $this->Guarda();
    if(
    $pro != "falso") {
    $fp = fopen("logged.txt","a+");
    fwrite($fp,"$ip|".(time()+120)."|\n");//Inserisco un massimo di 120 secondi prima che l'ospite non venga più contato
    fclose($fp);
    }
    }

    function
    Check(){//Serve a cancellare gli ospiti disconnessi(che non fanno azioni prima di 120 sec.)
    $file = file("logged.txt");
    $tempo = time();
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] < $tempo){
    $w[] = "";
    }else{
    $w[] = $rigo;
    }
    }
    $ok = implode("",$w);
    $fp = fopen("logged.txt","w+");
    fwrite($fp,$ok);
    fclose($fp);
    }
    function
    Mostra(){//Serve a mostrare gli utenti connessi
    $file = file("logged.txt");
    $quanti = count($file);
    if(
    $quanti == "") {$quanti = "0";}
    echo
    "<a href='http://leo91.altervista.org'>Utenti connessi: $quanti</a>";//MOSTRA "Utenti connessi: *numutenti*"
    }
    }
    ?>
    Questa è l'importante pagina classi.php dove è contenuta la classe Ospite che si occupa di tutto lo script.
    Questo codice è molto lungo, ma l'unica cosa che vi serve a modificare questo script sta nell'intervallo di tempo il quale l'utente deve considerarsi scollegato.
    In parole povere vi basti modificare, dove lo trovate, il numero 120 che sta ad indicare i secondi, cioè 2 minuti.
    Cambiando quel numero potrete decidere quando considerare l'utente on-line e off-line. Consiglio comunque di non abbassarlo sotto il minuto (60).
    Potete modificare un'altra cosa, ovvero l'output che visualizza "Utenti connessi:" che è nella terzultima riga. Li potete scrivere la frase da visualizzare, ma non modificate il nome della variabile ($quanti).
    Potete naturalmente mettere codice html come ad esempio per visualizzare una scritta rossa modificherete così:
    Codice PHP:
    <?
    #ALTRO CODICE
    echo "<font color='red'>Utenti connessi: $quanti</font>";
    #ALTRO CODICE
    ?>
    E ora che avete fatto la vostra bella classe, richiamatela dove volete visualizzare il numero di utenti connessi in questo modo:
    Codice PHP:
    <?
    include("classi.php");
    $tutto = new Ospite();
    $tutto->Aggiorna();//Aggiorna lo stato dell'utente
    $tutto->Inserisci();//Inserisce se ip nuovo
    $tutto->Check();//Controllo sugli utenti (disconn/conn)
    $tutto->Mostra();//Mostra infine il risultato
    ?>
    Fatto, ora il vostro counter per gli utenti on-line funziona!
    Ultima modifica di Leo91 : 05-02-2008 alle ore 14.34.46

  2. #2
    L'avatar di Leo91
    Leo91 non è connesso Altervistiano Junior
    Data registrazione
    28-03-2004
    Residenza
    alle tue spalle
    Messaggi
    728

    Predefinito

    Contatore online tramite IP: aggiornamento "semplicità!".

    Codice PHP:
    <?php
    session_start
    ();

    $ip = $_SERVER["REMOTE_ADDR"]; $ip = str_replace(".", "", $ip); //Tolgo i puntini dall'ip, per comodità.
    if(!$_SESSION["Visita"]) //Se non c'è alcuna sessione "Visita" da parte del visitatore...
    {
    $_SESSION["Visita"] = array("tempo" => time(), "id" => $ip); //...gliene assegno una!
    }

    function
    check()
    {
    $file = file("online.txt"); //File che contiene i visitatori attivi.
    $tempo_online = 600; //Il tempo dopo il quale il visitatore è da considerarsi off-line.
    foreach($file as $riga)
    {
    $ix = explode("|", $riga);
    if(
    time() >= $ix[1])
    {
    $w[] = "";
    $b = 1;
    }
    else
    {
    $w[] = $riga;
    }
    }
    if(
    $b)
    {
    $w = implode("", $w);
    $fu = fopen("online.txt", "w+");
    fwrite($fu, $w);
    fclose($fu);
    }
    }
    function
    online($tipo)
    {
    $tempo_online = 600; //Il tempo dopo il quale il visitatore è da considerarsi off-line.
    $file = file("online.txt");
    foreach(
    $file as $rigo)
    {
    $ex = explode("|",$rigo);
    if(
    $ex[0] == $_SESSION["Visita"]["id"])
    {
    $w[] = $ex[0]."|".($_SESSION["Visita"]["tempo"] + $tempo_online)."|\n";
    $a = 1;
    }
    else
    {
    $w[] = $rigo;
    }
    }

    if(!
    $a) //Nuova visita.
    {
    $fp = fopen("online.txt", "a+");
    fwrite($fp, $_SESSION["Visita"]["id"]."|".($_SESSION["Visita"]["tempo"] + $tempo_online)."|\n");
    fclose($fp);
    }
    else
    //Visita aggiornata.
    {
    $w = implode("", $w);
    $fp = fopen("online.txt", "w+");
    fwrite($fp, $w);
    fclose($fp);
    }
    check(); //controllo se qualche sessione è scaduta.
    $agg = file("online.txt"); //Rileggo il file.
    if($agg[0] != "")
    {
    $n_online = count($agg);
    }
    else
    {
    $n_online = 0;
    }
    if(!
    $tipo)
    {
    return
    "Utenti connessi: ".$n_online; //Mostra: Utenti connessi: #
    }
    else
    {
    return
    "document.write('Utenti connessi: ".$n_online."');";
    }
    }
    ?>
    Per far funzionare lo script vi basta scrivere:

    . In pagine .php
    Codice PHP:
    #codice
    echo online(0);
    #codice
    . In pagine .html, .html o comunque non dinamiche
    Codice HTML:
    <!-- Codice -->
    <script type="text/javascript" src="pagina.php"></script>
    <!-- Codice -->
    e pagina.php dovrà essere:
    Codice PHP:
    <?php
    include("online.php"); //online.php è la pagina con il codice dello script
    echo online(1);
    ?>
    Esempio [.php] QUI
    Esempio [.html] QUI
    Ultima modifica di Leo91 : 30-01-2008 alle ore 18.55.46

Regole di scrittura

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