Un chti bout de php siou plé


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Un chti bout de php siou plé

Message le Ven Jan 15, 2010 10:45

Hello les php codeurs,

Juste un petit blème tout simple (mais vu mon niveau en php, ca devient une montagne). Voila, j'ai un petit script "compteur.php" qui me compte le nombre de connectés sur un site en utilisant un petit fichier "compteur.txt".


Code: Tout sélectionner
<?php
function isBots()
{   
   $bots=array('72.14.192'=>1, '72.14.192'=>1, '66.249.72'=>1, '66.249.66'=>1, '66.249.65'=>1,
   '64.233.173'=>1, '216.239.58'=>1, '65.55.246'=>1, '65.55.235'=>1, '65.54.188'=>1, '64.4.8'=>1,
   '207.68.157'=>1, '207.68.146'=>1, '207.46.98'=>1, '207.46.98'=>1, '72.30.99'=>1, '72.30.98'=>1,
   '72.30.97'=>1, '72.30.61'=>1, '72.30.252'=>1, '72.30.226'=>1, '72.30.221'=>1, '72.30.216'=>1,
   '72.30.215'=>1, '72.30.214'=>1, '72.30.177'=>1, '72.30.135'=>1, '72.30.134'=>1, '72.30.133'=>1,
   '72.30.132'=>1, '72.30.131'=>1, '72.30.129'=>1, '72.30.128'=>1, '72.30.111'=>1, '72.30.110'=>1,
   '72.30.107'=>1, '72.30.104'=>1, '72.30.103'=>1, '72.30.102'=>1, '72.30.101'=>1, '68.142.251'=>1,
   '68.142.250'=>1, '68.142.249'=>1, '68.142.212'=>1, '66.94.238'=>1, '66.94.237'=>1, '66.94.232'=>1,
   '66.196.91'=>1, '66.196.65'=>1, '213.251.136'=>1, '194.3.104'=>1, '190.57.10'=>1, '140.94.82'=>1,
   '193.252.148'=>1, '193.252.118'=>1, '64.233.182'=>1);
   
   $shortip = explode(".",$_SERVER['REMOTE_ADDR']);
   array_pop($shortip);
   $shortip = implode(".",$shortip);
   if (isset($bots[$shortip])) return true;
   return false;
}

if (!file_exists($_SERVER['DOCUMENT_ROOT']."/".$dossier_compteur."/compteur.txt")) $compteur_live = array();
else $compteur_live = file($_SERVER['DOCUMENT_ROOT']."/".$dossier_compteur."/compteur.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 = "";
$onlinecount = 0;
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";
         $onlinecount++;
      }
   }
}

if (!isBots())
{
   $compteur .= date('U')."\n".$ip_en_cours;
   $onlinecount++;
}
$pointeur=fopen($_SERVER['DOCUMENT_ROOT']."/".$dossier_compteur."/compteur.txt","w");
fputs($pointeur,$compteur);
fclose($pointeur);

echo $onlinecount;
?>




A la sortie j'ai la variable $onlinecount qui contient le nombre et je l'affiche ou je veux.

J'aimerais ajouter les quelques lignes qui vont faire cela :

Code: Tout sélectionner
1 - ouvrir un fichier "record.txt" (on part du principe qu'il existe)
2 - lire son contenu (un nombre sur la premiere ligne, une date sur la seconde ligne, une heure sur la troisieme ligne)
3 - ranger les infos dans $onlinerecord; $daterecord; $heurerecord

si($onlinecount > onlinerecord)
- mettre a jour records.txt avec nombre, date et heure
- ranger les nouvelles infos dans $onlinerecord; $daterecord; $heurerecord
fin de si


Voila c'est tout bébête (à la sortie je peux utiliser mes 3 variables dans tous les cas (record battu ou pas). Pour me simplifier la lecture, ca serait bien de rajouter ca à la fin du script actuel et pas de le noyer au millieu. ki ki peut me faire ca sur un coin de table ? :wink:


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 11:01

Un truc comme ça (y a peut-être un coquille, j'ai pas testé) ?

Code: Tout sélectionner
$online_count = '500000'; // on peut rêver

$filename = 'records.txt';

// ouvre le fichier et récupère les infos
$filecontent = file_get_contents($filename);
list($onlinerecord, $daterecord, $heurerecord) = explode("\n", $filecontent);

if( $onlinecount>$onlinerecord )
{
  // on met à jour le fichier
  $new_content = $onlinecount ."\n" .date('Y-m-d') ."\n". date('H:i');
  file_put_contents($filename, $new_content);
}


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 11:13

merci je vais de ce pas testouiller la chose sans trop rêver à la premiere ligne :mrgreen:


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 11:39

ca coince sur cette ligne :

Code: Tout sélectionner
$filecontent = file_get_contents($filename);


avec ce message :

Code: Tout sélectionner
Warning: file_get_contents(records.txt) [function.file-get-contents]: failed to open stream: No such file or directory in /vhosts/a/z/azsante/www/compteur/compteur.php on line 61


puis sur
Code: Tout sélectionner
file_put_contents($filename, $new_content);


Code: Tout sélectionner
Fatal error: Call to undefined function: file_put_contents() in /vhosts/a/z/azsante/www/compteur/compteur.php on line 68


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 11:42

Peut etre dois je mettre :

Code: Tout sélectionner
$_SERVER['DOCUMENT_ROOT']."/".$dossier_compteur."/records.txt"


comme c'est le cas dans le script actuel :?:

Bon je test. Ben non. si je fais ca j'ai :

Fatal error: Call to undefined function: file_put_contents() in /vhosts/a/z/azsante/www/compteur/compteur.php on line 68


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 11:53

oui, tu dois mettre le bon chemin vers le fichier (et le créer si nécessaire).

pour l'erreur file_put_contents(), je viens de voir que c'est dispo à partir de php5.
Si tu n'as pas la possibilité de passer en php5, tu peux "créer" la fonction file_put_contents() comme expliqué là :
http://fr.php.net/manual/fr/function.file-put-contents.php#86864

Code: Tout sélectionner
if (!function_exists('file_put_contents')) {
    function file_put_contents($filename, $data) {
        $f = @fopen($filename, 'w');
        if (!$f) {
            return false;
        } else {
            $bytes = fwrite($f, $data);
            fclose($f);
            return $bytes;
        }
    }
}


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 11:56

oh "pitin", je suis aussi bon en anglais qu'en php :mrgreen: My tailor is rich ans my sister is not a boy et là je suis a fond :mrgreen:

on peut pas mettre le bon code direct dans le script sans faire de fonctions :?:


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 12:03

Zecat a écrit:on peut pas mettre le bon code direct dans le script sans faire de fonctions :?:

Si, ca deviendrait un truc comme ça :
Code: Tout sélectionner
$online_count = '500000'; // on peut rêver

$filename = $_SERVER['DOCUMENT_ROOT'].'/'.$dossier_compteur.'/records.txt';

// ouvre le fichier et récupère les infos
$filecontent = file_get_contents($filename);
list($onlinerecord, $daterecord, $heurerecord) = explode("\n", $filecontent);

if( $onlinecount>$onlinerecord )
{
  // on met à jour le fichier
  $new_content = $onlinecount ."\n" .date('Y-m-d') ."\n". date('H:i');

  $f = @fopen($filename, 'w');
  fwrite($f, new_content);
  fclose($f);
}


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 12:04

oki je retestouille

Ca marche.

J'ai juste viré un @ en trop (fopen) et ajouté un $ qui manquait (new_content).

Merci à toi


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 12:16

Zecat a écrit:Merci à toi

Pas de quoi, je te souhaite que le fichier 'records' soit mis à jour quotidiennement ;)


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 12:40

voila c'est en place :

-http://www.az-sante.com/

en bas de page.

Grand merci à toi, à charge de revanche (bon pas pour t'aider en php c'est sur mais p'têt pour aller valider express dans Yag :wink: )


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 12:50

Zecat a écrit:Grand merci à toi, à charge de revanche (bon pas pour t'aider en php c'est sur mais p'têt pour aller valider express dans Yag :wink: )

C'est noté :mrgreen:


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 13:02

Juste une petite question par pure curiosité intellectuelle. la meme chose mais dans une base mysql :
- accès à la base
- lecture enregistrement
- mise à jour
- reécriture enregistrement

en terme de :

- vitesse
- consommation ressources sur le serveur

par rapport à la démarche "petit fichier.txt", ca donne quoi ? quif quif, 10 fois plus pour l'un ? Juste pour savoir si je vais pas écrouler mon mutu :wink:
Dernière édition par Zecat le Ven Jan 15, 2010 13:03, édité 1 fois.


raljx
WRInaute accro
WRInaute accro
 
Messages: 2823
Inscription: 10 Juil 2006

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 13:02

ca devient une place de marché ici :mrgreen:
eh! Olivier ya truc a faire la dessus ;)


Zecat
WRInaute accro
WRInaute accro
 
Messages: 11992
Inscription: 1 Mar 2005

Re: Un chti bout de php siou plé

Message le Ven Jan 15, 2010 13:03

ou un forum d'entraide ... entre ceux :wink: qui savent et ceux qui ne savent pas ... :wink:

D'ailleurs ce forum "developpement de site web" me semble tout à fait adapté à cela entre autres non ? Et je préfère demander ici ou je connais du monde que sur un forum lamda sur php ou je connais personne.

Un chti bout de php siou plé

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités