Bessoin d'aide ajout dans un script....

Le forum de l'Annuaire Francophone des Scripts CGI: CGI : Problème avec un script: Bessoin d'aide ajout dans un script....

Richard

vendredi 22 décembre 2000 - 06h39
Bonjour voici un script perl qui est un compteur du nombre de connecté.

Il fonctionne très bien mais j'aimerais ajouter une fonction.

Le problème je suis débutant donc j'ai besoin d'un ame charitable, ps envoyez ensuite le script a l'auteur qui vous creditera du changement.

Ce que je veut est simple :
Je veut que lorsque le timer est activé et qui efface les ip, je veut que les ip encore présent soit conserver !

sinon le compteur n'est pas juste ....

voici le script

et merci !

#!/usr/bin/perl

##############################################################################
# Guests v1.2
# Copyright (c)1999 Ryan Lambert, All Rights Reserved.
#
# Created: 5/25/1999
# Last Modified: 6/23/1999
#
# Email Support: ral@bitsmart.com
# Web Site: http://www.bitsmart.com/ral/
##############################################################################
# Define Variables

# The file that stores IP addresses and time they accessed the site
$guests_data = 'guests.txt';

# How many seconds to keep an IP address in the list before it becomes invalid
$timeout = 15;

# Logs at what time you had the most guests browsing your site
$max_log = 'maxguests.txt';

# Done! No need to go below unless you know what your doing!
##############################################################################


$line = $ENV{'REMOTE_ADDR'} . "\t" . time . "\n";

print "Content-type: text/html\n\n";

if ( -e $guests_data ne 1 or -s $guests_data eq 0 ) { &write_new; print '1'; exit; }

&write_update;

&write_new;

$count = &read_count;

print $count;

&log_max if $max_log;

exit;


##############################################################################
# Sub-Routines

sub log_max
{
if ( -e $max_log )
{
open(FILE,$max_log) || die $!;
$log = <FILE>;
close(FILE);
}
else { $log = "0\t0" }

($MAX,$TIME) = split(/\t/,$log);

if ( $count > $MAX )
{
($sec,$min,$hour,$mday,$mon,$year)=localtime(time);
$year = $year + 1900;

open(FILE,">$max_log") || die $!;
print FILE "$count\t$hour:$min:$sec $mon/$mday/$year";
close(FILE);
}

}

sub read_count
{
open(FILE,$guests_data) || &error;
@file = <FILE>;
close(FILE);

$count = @file;

return($count);
}

sub write_new
{
open(FILE,">>$guests_data") || &error;
print FILE $line;
close(FILE);
}

sub write_update
{
open(FILE,$guests_data) || &error;
@file = <FILE>;
close(FILE);

open(FILE,">$guests_data") || &error;
foreach $fline ( @file )
{
($IP,$TIME) = split(/\t/,$fline);
chomp($TIME);
if ( $IP ne $ENV{'REMOTE_ADDR'} )
{
if ( $TIME + $timeout > time ) { print FILE "$IP\t$TIME\n"; }
}
}
close(FILE);
}

sub error
{
print "[Erreur]";
exit;
}

# End of sub-routines. End of script. All done.
##############################################################################

Frédéric (Frédéric)

vendredi 22 décembre 2000 - 13h19
Bonjour,

ce que vous souhaitez ne me parait pas tres logique. Vous souhaitez :
<<Je veut que lorsque le timer est activé et qui efface les ip, je veut que les ip encore présent soit conserver ! >>
Lorsqu'il efface les IP vous voulez les conserver. En résumé vous ne souhaitez pas effacer les ip ?

Avez vous pensé a regarder http://www.scripts-fr.com/scripts/scripts-fr/connect_txt.shtml

Richard

samedi 23 décembre 2000 - 04h23
Bonjour,

Non je ne veut pas conserver le ip mais ce que je veut est de conserver les ip qui sont encore connecté ce que le script ne fait pas !

exemple :

Je suis sur la page donc dans un fichier mon ip est inscrit. Ensuite le timer fait son boulot mais que je soit encore sur la page ou pas il efface mon ip et affichier 0 connecté.

Vous voyez ce n"est pas pratique donc le but est vraiment de dire si le ip est encore connecté de ne pas l'effacer.

Pour l'autre script je l'ai essayé mais élas il ne fonctionne pas . (J'ai les ssi ....)

Merci @+

Frédéric (Frédéric)

samedi 23 décembre 2000 - 11h24
Bonjour,

il est impossible de savoir quelles IP sont connectées puisque HTTP est un protocole stateless (sans état).
On peut juste savoir qu'il y a X secondes, telle adresse IP a fait une requete de page.

Quant à l'autre script il fonctionne très bien que vous ayez les SSI ou pas (normal qu'il fonctionne c'est moi qui l'ait écrit ;).


Ajouter un message


Ceci est une zone publique. Si vous n'avez pas de compte, entrez votre nom dans le champ "Identificateur" et laissez le mot de passe vide. Votre adresse E-mail est facultative.
Identificateur :  
Mot de passe :
E-mail :
Poster "anonymement"