IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Qui est en ligne


Sujet :

PHP & Base de données

  1. #1
    HwRZxLc4
    Invité(e)
    Par défaut [SQL] Qui est en ligne
    Bonsoir,

    J'éssaye d'apliquer un scripte qui compte le nombre de visiteur sur le site, le problème est que il prand l'ip de mon serveur, donc quand on surf avec 3 pc du réseaux sur le site il indique 1 utilisateur et pas 3.

    Voici mon code....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    function nb_visiteurs_connecte($time,$filename="data.dat")
    {
    $ip = getenv("REMOTE_ADDR");
    $date=time();
    $i=0;
    $ii=0;
    $bool=0;
    if(file_exists($filename))
    {
    if($fichier=fopen($filename,"r"))
    {
    while(!feof($fichier))
    {
    $ligne=fgets($fichier,4096);
    $tab=explode("|",$ligne);
    if($tab[1]>0)
    {
    $tab_de_tab[$i][0]=$tab[0];
    $tab_de_tab[$i][1]=$tab[1];
    $i++;
    }
    }
    fclose($fichier);
    }
    }
    for($j=0;$j<$i;$j++)
    {
    if(($date-chop($tab_de_tab[$j][1]))>$time)
    {
    }
    else
    {
    $tab_de_tab_actualise[$ii][0]=$tab_de_tab[$j][0];
    $tab_de_tab_actualise[$ii][1]=chop($tab_de_tab[$j][1]);
    $ii++;
    }
    }
    for($j=0;$j<$ii;$j++)
    {
    if($tab_de_tab_actualise[$j][0]==$ip)
    {
    $bool=1;
    }
    }
    if($bool==0)
    {
    $tab_de_tab_actualise[$ii][0]=$ip;
    $tab_de_tab_actualise[$ii][1]=$date;
    $ii++;
    }
    if($fichier=fopen($filename,"w"))
    {
    for($j=0;$j<$ii;$j++)
    {
    fputs($fichier,chop($tab_de_tab_actualise[$j][0]));
    fputs($fichier,"|");
    fputs($fichier,chop($tab_de_tab_actualise[$j][1]));
    fputs($fichier,"\n");
    }
    fclose($fichier);
    }
    echo "<b>",$ii,"</b> visiteurs connectés";
    }
    nb_visiteurs_connecte(300,"data.dat");
    ?>
    Merci pour votre aide.
    Dernière modification par HwRZxLc4 ; 30/04/2006 à 21h09. Motif: Résolu

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Salut,

    si le test se fait sur un serveur qui se trouve à l'extérieur du réseau où se trouvent les 3 PC en question, et si les 3 PC se trouvent sur le meme réseau local, qui accèdent par la même ligne vers Internet, alors c'est normal car il n'y a qu'une seule IP commune pour les 3 machines.
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  3. #3
    HwRZxLc4
    Invité(e)
    Par défaut
    Je sais, mai j'ai déjà vu un script qui tennais compte des pc interne au réseaux, mai je remet pas la main dessus....

  4. #4
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 863
    Points
    863
    Par défaut
    Je ne trouve pas que ce soit la metthode la plus simple.
    Ce que je fait pour faire ce genre de chose c'est que je crée une table qui enregistre toute les sessions (et qui les effacent si la personne n'a pas raffraichi de page pendant un certain temps).

    Comme ca j'ai le nombre de visiteur en "temps réel" et en plus je me sert de cette table pour les session (j'attribu le nom du membre a chaque session si il sont connecté).
    manganimes (en construction) -
    zemanga

  5. #5
    HwRZxLc4
    Invité(e)
    Par défaut
    Oui mais sa fais des requètes en plus....

    J'ai rajouté sa au début et la sa fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [FONT=Verdana]if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
        elseif(isset($_SERVER['HTTP_CLIENT_IP']))    
        $ip = $_SERVER['HTTP_CLIENT_IP'];    
        else 
        $ip = $_SERVER['REMOTE_ADDR'];   [/FONT]

    et enlevé cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ip = getenv("REMOTE_ADDR");

  6. #6
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 863
    Points
    863
    Par défaut
    Citation Envoyé par cobra-expert
    Oui mais sa fais des requètes en plus....
    Ca fait 2 requettes enplus. Et tu peut faire la meme chose avec ton .dat de toute manière.
    manganimes (en construction) -
    zemanga

  7. #7
    HwRZxLc4
    Invité(e)
    Par défaut
    a bon comment ?

    Ps: je début donc faus m'excuser...

  8. #8
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 863
    Points
    863
    Par défaut
    De quoi les requettes ou le .dat?
    manganimes (en construction) -
    zemanga

  9. #9
    HwRZxLc4
    Invité(e)
    Par défaut
    Le .dat, car avec les requète c'est trop complex pour tou sécrire pour moi...

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    mars 2005
    Messages
    1 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 1 665
    Points : 863
    Points
    863
    Par défaut
    Citation Envoyé par cobra-expert
    Le .dat, car avec les requète c'est trop complex pour tou sécrire pour moi...
    Je trouve que c'est beaucoup plus simple de faire des requette SQL que de faire de lecture et lecture de fichier. Et en plus je suis sur que ca solicite beaucoup plus le serveur de trvailler sur des fichier .dat (ce n'est que mon avis). Sinon les bases de donné n'aurait pas été inventées.
    manganimes (en construction) -
    zemanga

  11. #11
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    Citation Envoyé par Death83
    Et en plus je suis sur que ca solicite beaucoup plus le serveur de trvailler sur des fichier .dat (ce n'est que mon avis). Sinon les bases de donné n'aurait pas été inventées.
    Hmm, là, ca dépend Les accès filesystem sont plus rapides qu'un accès à une DB, mais évidemment, t'as beaucoup plus de choses à gérer dans le cas d'accès directs à des fichiers (l'une des pires: les accès concurrents). Les DB n'ont pas été inventées parce que ca allait plus vite, mais surtout pour avoir une gestion et une structure correcte des données, et un langage 'universel' d'accès à celles-ci. (Ca n'engage que moi, mais je dois pas être trop trop loin de la vérité j'pense )
    Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure

  12. #12
    HwRZxLc4
    Invité(e)
    Par défaut
    Merci beaucoup, comme je sais pas comment le faire avec dase de donnée, je vais toujours rester avec ce que j'ai....

    encore merci.

Discussions similaires

  1. qui est en ligne ?
    Par Invité2 dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2011, 12h47
  2. Réponses: 2
    Dernier message: 18/08/2009, 21h14
  3. [MySQL] Faire passer ma de la table sql qui est en post via une session ou un get
    Par valvalval dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/08/2008, 12h57
  4. [MySQL] Qui est en ligne
    Par Him dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/04/2008, 21h43
  5. Qui est en ligne
    Par guiguistuder dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2006, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo