[Script PHP] connectés

WRInaute discret
Salut

J'aime beaucoup ce script petit script qui utilise juste un fichier texte.
Il te faudra :

- 1 page cpt.txt (chmod 777)
- 1 page count.php
- 1 fonction pour appeller le compteur

La page count.php
Code:
<?php
#
## Le compteur (ce code) est basé sur un script du site http://www.actulab.com/.
## N'oublier pas de leurs rendre visite :).
## N'oublié pas non plus de mettre le fichier cpt.txt en CHMOD 777.
#

$compteur_live = file("cpt.txt");

$premiere_ligne_a_garder=-2;
do { 
$premiere_ligne_a_garder=$premiere_ligne_a_garder+2;
} while((date('U', strtotime('-300 seconds')) > $compteur_live[$premiere_ligne_a_garder]) && ($premiere_ligne_a_garder < count($compteur_live)));

if(isset($_SERVER["REMOTE_ADDR"])) {
  $ip_en_cours = $_SERVER["REMOTE_ADDR"];
}else{
  $ip_en_cours = "Non identifiable";
}

$compteur = "";
if($premiere_ligne_a_garder < count($compteur_live)) { 
  for($i=$premiere_ligne_a_garder; $i<count($compteur_live); $i=$i+2) {
    
    if(trim($compteur_live[$i+1]) != $ip_en_cours) {
      $compteur .= trim($compteur_live[$i])."\n".trim($compteur_live[$i+1])."\n";
    }
    
  }
}

$compteur .= date('U')."\n".$ip_en_cours;

$pointeur=fopen("cpt.txt","w");
fputs($pointeur,$compteur);
fclose($pointeur);
?>

Pour appeller le compteur, utiliser cette fonction :
Code:
function afCompteur($path){
  $compteur_live = file($path."/cpt.txt");  
  $out=(round(count($compteur_live)/2))." ";
  if((count($compteur_live)/2) > 1) {
   $out.="visiteurs connectés";
  }else{
    $out.="visiteur connecté";
  }
  return $out;
}

Exemple d'utilisation :
Pour maintenir le fichier cpt.txt à jours, il faut include le fichier count.php, et pour afficher le nbr de connecté, on appele la fonction afCompteur() :
Code:
<?php
include("count.php");
afCompteur("./repertoire");
?>

Simple, facile à utiliser et pas de requêtes mysql inutilent.
Sky
 
WRInaute accro
>> Simple, facile à utiliser et pas de requêtes mysql inutilent.

et tu t'es jamais demandé si d'ouvrir un fichier, recuperer toutes les lignes et le fermer n'était pas plus gourmand qu'une requette en BDD ? :)
 
WRInaute accro
D'après ce que j'ai déjà pu lire c'est moins gourmand mais je doute sérieusement...

Personnellement je préfère utiliser la base de donnée pour faire ça
 
WRInaute occasionnel
A mon sens ces scripts paramétrés à 300 secondes (5 minutes) servent à flatter son égo en grossissant les stats.
Pour indiquer un nombre de connectés il me semble que cette valeur devrait être largement réduite. (et en plus ça fait moins de lignes à analyser donc c'est plus performant)
Ou alors mentionner que ce sont les visiteurs ces 5 dernières minutes, et non pas des connectés.
Les systèmes basés sur des fichiers ne peuvent pas supporter un gros traffic :
- conflit d'accès au fichier
- perte de certaines valeurs pour ceux qui n'ont pas pu être écrits.
C'est tout l'intérêt d'une base de données.
 
WRInaute discret
Oui, 5mn est beaucoup, mais de toute façon, quel que soit la technique, on a jamais le nbr de personne en ligne exact .... (du moins, pas en http). Tu peut aussi mettre à 2 mn si ça te plais ...

Sinon, pour le "cimbat" fichier ou bdd ... ça d"pend beaucoup de ton serveur aussi. Si t'es sur free, un compteur fichier texte sera plus rapide. Ensuite, ça dépend de toi lol :)

Pour ce qui est des pb de lecture/écriture en nbr ... il existe une focntion qui marche très bien : flock() (http://fr.php.net/manual/fr/function.flock.php)

Ensuite, moins gourmand ou pas ... pour un simple lecture/écriture ... je sais pas ...

Sky
 
WRInaute discret
je retire ce que j'ai sur flock.
Je vient de passer 1 heure à lire à ce sujet, et c'est assès complexe pour assurer une ecriture propre à 100% quand y'a beaucoup de connectés.

Alors si t'a un gros site avec 10 personne en simultanées, choisi une bdd ^^. Sauf si t'aime te prendre la tete sur la fonction flock :)
 
Discussions similaires
Haut