|
| Vis antallet af aktuelt besøgende Fra : Ace |
Dato : 01-07-08 09:09 |
|
Hejsa.
Jeg vil gerne vise på min side, hvor mange der lige nu er inde på
den, men de php-scripts jeg indtil nu har forsøgt mig med, har
bare talt op hvor mange gange siden opdateres, hvilket på ingen
måde er hvad jeg leder efter. Er der ikke nogen, der kan vise mig
et script-eksempel, som viser antallet af personer der har min
side åben i deres browser og som reducerer tallet når nogen
forlader siden igen?.. dog helst uden at det kræver MySql.
Venligst
Ace
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Benny Nissen (01-07-2008)
| Kommentar Fra : Benny Nissen |
Dato : 01-07-08 11:34 |
|
Ace wrote:
> Er der ikke nogen, der kan vise mig
> et script-eksempel, som viser antallet af personer der har min
> side åben i deres browser og som reducerer tallet når nogen
> forlader siden igen?.. dog helst uden at det kræver MySql.
Næh, for det kan ikke rigtigt lade sig gøre. Webserveren ved ikke, hvem
der kigger på siden.
| |
Sune Storgaard (01-07-2008)
| Kommentar Fra : Sune Storgaard |
Dato : 01-07-08 15:05 |
|
"Benny Nissen" <benny@bennynissen.dk> skrev i en meddelelse
news:486a083f$0$90263$14726298@news.sunsite.dk...
> Næh, for det kan ikke rigtigt lade sig gøre. Webserveren ved ikke, hvem
> der kigger på siden.
Det er da skidt, hvor ved den så fra hvor den skal sende forespørgsler hen?
Man kan vel via session med en vis rimelighed antage om der en besøgende.
Det kunne man så hælde ind i et array, hvor der jo findes et hav af
kommandoer til at tælle op med. Har man ikke sql kan man jo bare gemme det i
en fil.
session_start , fopen ,count(_recursive) kunne være et par søgeord.
| |
Benny Nissen (01-07-2008)
| Kommentar Fra : Benny Nissen |
Dato : 01-07-08 15:12 |
|
Sune Storgaard wrote:
> "Benny Nissen" <benny@bennynissen.dk> skrev i en meddelelse
> news:486a083f$0$90263$14726298@news.sunsite.dk...
>
>> Næh, for det kan ikke rigtigt lade sig gøre. Webserveren ved ikke, hvem
>> der kigger på siden.
>
> Det er da skidt, hvor ved den så fra hvor den skal sende forespørgsler hen?
>
Det gør den jo kun når du requester noget fra serveren. Når siden er
hentet aner serveren da ikke om brugeren læser på siden eller har lukket
brovseren igen.
| |
Sune Storgaard (01-07-2008)
| Kommentar Fra : Sune Storgaard |
Dato : 01-07-08 17:07 |
|
"Benny Nissen" <benny@bennynissen.dk> skrev i en meddelelse
news:486a3b37$0$90268
> Det gør den jo kun når du requester noget fra serveren. Når siden er
> hentet aner serveren da ikke om brugeren læser på siden eller har lukket
> brovseren igen.
Derfor var det at en "session" er et udemærket synonym for "aktuel
besøgende".
Helt præcist bliver det aldrig, og man kan da også nemt snyde ved at lade 2
personer se på samme skærm..eller loade en side med lukkede øjne..
| |
Benny Nissen (01-07-2008)
| Kommentar Fra : Benny Nissen |
Dato : 01-07-08 17:13 |
|
Sune Storgaard wrote:
> "Benny Nissen" <benny@bennynissen.dk> skrev i en meddelelse
> news:486a3b37$0$90268
>> Det gør den jo kun når du requester noget fra serveren. Når siden er
>> hentet aner serveren da ikke om brugeren læser på siden eller har lukket
>> brovseren igen.
>
> Derfor var det at en "session" er et udemærket synonym for "aktuel
> besøgende".
Arh ... det er en tilnærmelse. Hvis man ryger ind på siden ved en fejl
og ikke læser et eneste ord, men lukker med det samme igen tæller
sessionen stadig default 120 sekunder på nogle servere. Ved godt det kan
ændres ... men ...
> Helt præcist bliver det aldrig, og man kan da også nemt snyde ved at lade 2
> personer se på samme skærm..eller loade en side med lukkede øjne..
Netop. Det var faktisk også derfor jeg skrev som jeg gjorde i første
indlæg. Man kan ikke tælle det.
--
Benny
| |
Dan Storm (01-07-2008)
| Kommentar Fra : Dan Storm |
Dato : 01-07-08 15:04 |
|
Ace skrev:
> Hejsa.
>
> Jeg vil gerne vise på min side, hvor mange der lige nu er inde på
> den, men de php-scripts jeg indtil nu har forsøgt mig med, har
> bare talt op hvor mange gange siden opdateres, hvilket på ingen
> måde er hvad jeg leder efter. Er der ikke nogen, der kan vise mig
> et script-eksempel, som viser antallet af personer der har min
> side åben i deres browser og som reducerer tallet når nogen
> forlader siden igen?.. dog helst uden at det kræver MySql.
>
> Venligst
> Ace
Du kan prøve noget ala det her (dog noget ustabilt, men idéen er der)
Kræver at du bruger sessions og at du har en fil du kan læse og skrive til:
<?php
session_start();
function getCurrentVisitors()
{
$visitors_file = "current_visitors.log";
$timer = 300; // sekunder
$visitors = file($visitors_file);
$new_content = "";
$current = 0;
$insert_self = true;
$new_time = time()+$timer;
foreach($visitors as $line)
{
$cells = explode(";", $line);
if(time() <= $cells[1])
{
if($cells[0] == session_id())
{
$new_line = session_id().";".$new_time."\n";
$insert_self = false;
}
else
{
$new_line = $cells[0].";".$cells[1]."\n";
}
$current++;
$new_content .= $new_line;
}
}
if($insert_self)
{
$new_content .= session_id().";".$new_time."\n";
$current++;
}
file_put_contents($visitors_file, $new_content);
return $current;
}
echo getCurrentVisitors();
?>
--
Dan Storm - storm at err0r dot dk / http://err0r.dk
Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!
| |
Erik Ginnerskov (02-07-2008)
| Kommentar Fra : Erik Ginnerskov |
Dato : 02-07-08 05:47 |
| | |
Benny Nissen (02-07-2008)
| Kommentar Fra : Benny Nissen |
Dato : 02-07-08 08:54 |
|
Erik Ginnerskov wrote:
> Ace wrote:
>> Hejsa.
>>
>> Jeg vil gerne vise på min side, hvor mange der lige nu er inde på
>> den,
>
> http://www.phpuniverset.dk/show_artikels.phtml?ArtikelID=21
>
[snip fra siden]
/* Vi sletter alle brugere fra online-listen der ikke har været aktive i
5 min. Jeg synes 5 min. er passende, men antallet af min kan ændres ved
simpelt at ændre 5 MINUTE til det antal min. man ønsker. */
[/snip]
Og det var netop det jeg skrev til at starte med, at du kan IKKE tælle
antal online. Denne tæller viser antallet af brugere der har hentet
noget fra siden for under 5 minutter siden, men der er ingen garanti for
at de er online mere.
--
Benny
| |
Philip Nunnegaard (02-07-2008)
| Kommentar Fra : Philip Nunnegaard |
Dato : 02-07-08 19:39 |
|
"Benny Nissen" <benny@bennynissen.dk> skrev
> Og det var netop det jeg skrev til at starte med, at du kan IKKE tælle
> antal online. Denne tæller viser antallet af brugere der har hentet noget
> fra siden for under 5 minutter siden, men der er ingen garanti for at de
> er online mere.
Hvilket vel lige præcis er pointen i de fleste svar i denne tråd, bare
formuleret på forskellig måde.
Det er også den metode jeg bruger, dog kun på profile-indehavere der logger
ind.
Skulle jeg lave det med alle besøgende på IP, ville jeg dog nok også kigge
på hostname for at filtrere Google, Yahoo og andre robotter fra.
| |
Martin (04-07-2008)
| Kommentar Fra : Martin |
Dato : 04-07-08 16:09 |
|
Ace wrote:
> Hejsa.
>
> Jeg vil gerne vise på min side, hvor mange der lige nu er inde på
> den, men de php-scripts jeg indtil nu har forsøgt mig med, har
> bare talt op hvor mange gange siden opdateres, hvilket på ingen
> måde er hvad jeg leder efter. Er der ikke nogen, der kan vise mig
> et script-eksempel, som viser antallet af personer der har min
> side åben i deres browser og som reducerer tallet når nogen
> forlader siden igen?.. dog helst uden at det kræver MySql.
AJAX
Brugeren kommer ind på siden, der loader et javascript, som så skriver
til noget serverside - denne javascript opdaterer sig selv ca. hvert
sekund - så hvis en bruger sætter sig ned og begynder at læse en artikel
eller lign. så vil javascriptet reloade sig selv i baggrunden - og vil
blive ved med det indtil brugeren forsvinder fra sitet.
<?php
// Din standard side
?>
<html>
<head>
// Link til javascript filen nedenunder
// Der behøves ikke noget window.onload,
// da den første funktion er en autoloader
</head>
<div>
<span id="visitor">10</span>
</div>
// javascript
$(function() {
updateVisitor();
})
function updateVisitor() {
var ElementID = 'visitor';
$.ajax({
url: update.php,
data: {user:<?php echo $_SESSION['visitor']; ?>},
method: 'POST',
success: function(data) {
$(ElementID).html(data);
setTimeout ( "updateVisitor()", 1000 ); // 1000 = 1 sekund
}
});
}
<?php
// update.php
$visitFile = 'myvisits.txt';
$visitfileLines = explode("\n", file_get_content($visitFile));
$numbers = count($visitfileLines);
foreach($visitfileLines AS $line) {
if(!$_SESSION['visitor']) file_put_content($visitFile, FILE_APPEND);
if(time()+2 < $line) $numbers--;
// 2 = ca. dobbelt så meget som sekunder i javascriptet
// Måske skal < være > det må du selv lige lege med
}
echo $numbers;
?>
| |
Dan Storm (04-07-2008)
| Kommentar Fra : Dan Storm |
Dato : 04-07-08 17:10 |
|
Martin skrev:
> Brugeren kommer ind på siden, der loader et javascript, som så skriver
> til noget serverside - denne javascript opdaterer sig selv ca. hvert
> sekund - så hvis en bruger sætter sig ned og begynder at læse en artikel
> eller lign. så vil javascriptet reloade sig selv i baggrunden - og vil
> blive ved med det indtil brugeren forsvinder fra sitet.
Jeg er dælme glad for jeg ikke bruger din side der laver et et kald for
hvert sekund jeg sidder og kigger på din side...
| |
Martin (04-07-2008)
| Kommentar Fra : Martin |
Dato : 04-07-08 19:12 |
|
Dan Storm wrote:
> Martin skrev:
>> Brugeren kommer ind på siden, der loader et javascript, som så skriver
>> til noget serverside - denne javascript opdaterer sig selv ca. hvert
>> sekund - så hvis en bruger sætter sig ned og begynder at læse en
>> artikel eller lign. så vil javascriptet reloade sig selv i baggrunden
>> - og vil blive ved med det indtil brugeren forsvinder fra sitet.
>
> Jeg er dælme glad for jeg ikke bruger din side der laver et et kald for
> hvert sekund jeg sidder og kigger på din side...
Jeg har aldrig sagt det skal bruges, men det var et forslag som løser
spørgernes præcise spørgsmål.
Dog er det ikke noget du ligger mærke til, dem som mere skulle være
"bange" er nok mere webserveren :)
Han havde jo egentlig skrevet at han havde fundet alle jeres løsninger,
men fx. din løsning, den vil jo faktisk dumpe hvis der er en person som
sidder og læser en artikel eller lign. (altså en der tager mere end 300
sekunder at læse) eller en person som lukker siden efter få sekunder.
| |
Dan Storm (05-07-2008)
| Kommentar Fra : Dan Storm |
Dato : 05-07-08 12:58 |
|
Martin skrev:
> Jeg har aldrig sagt det skal bruges, men det var et forslag som løser
> spørgernes præcise spørgsmål.
Jeg synes ikke forslaget er særligt godt - at have klienten til at lave
en forespørgsel på serveren hvert sekund, vil unægteligt kræve både
trafik og processerkraft (uanset størrelsen af begge).
> Dog er det ikke noget du ligger mærke til, dem som mere skulle være
> "bange" er nok mere webserveren :)
Som du så kunne se, mener jeg noget andet...
>
> Han havde jo egentlig skrevet at han havde fundet alle jeres løsninger,
> men fx. din løsning, den vil jo faktisk dumpe hvis der er en person som
> sidder og læser en artikel eller lign. (altså en der tager mere end 300
> sekunder at læse) eller en person som lukker siden efter få sekunder.
Ganske givet; men hvordan set det så ud når en bruger besøger siden som
ikke har javascript slået til?
Og er syntaksen ikke også noget Prototype skidt?
Anyways, din løsning er ikke skudsikker, ligesom min eller andres ikke
er det - men jeg synes ikke det er en god løsning at lade klienterne stå
for optælningen. Det burde være rent serverside.
| |
Martin (05-07-2008)
| Kommentar Fra : Martin |
Dato : 05-07-08 16:31 |
|
Dan Storm wrote:
> Martin skrev:
>> Jeg har aldrig sagt det skal bruges, men det var et forslag som løser
>> spørgernes præcise spørgsmål.
>
> Jeg synes ikke forslaget er særligt godt - at have klienten til at lave
> en forespørgsel på serveren hvert sekund, vil unægteligt kræve både
> trafik og processerkraft (uanset størrelsen af begge).
Trafikken skulle da gerne være unlimited, på en anstændig host, det
burde man ikke bekymre sig om.
Processorkraften, tjaaa - der skal selvfølgelig lige laves noget cronjob
eller lign, så visitor filen ikke bliver alt for stor, men ellers så
tager det en 1.6ghz server at køre denne fil igennem (hvis filen er på
1mb) på 0.2 sek.
>
>> Dog er det ikke noget du ligger mærke til, dem som mere skulle være
>> "bange" er nok mere webserveren :)
>
> Som du så kunne se, mener jeg noget andet...
Tjaa, den eneste forskel jeg ved du kan se er at der står loading nede i
bunden af browseren hvert sekund.
>
>>
>> Han havde jo egentlig skrevet at han havde fundet alle jeres
>> løsninger, men fx. din løsning, den vil jo faktisk dumpe hvis der er
>> en person som sidder og læser en artikel eller lign. (altså en der
>> tager mere end 300 sekunder at læse) eller en person som lukker siden
>> efter få sekunder.
>
> Ganske givet; men hvordan set det så ud når en bruger besøger siden som
> ikke har javascript slået til?
I disse web 2.0 dage, så er der næsten ingen større sider man rigtig kan
navigere rundt på uden at have javascript slået til.
Så mit gæt er på at det efterhånden kun er tekstbaseret browsere (lynx
osv) som ikke læser javascript.
> Og er syntaksen ikke også noget Prototype skidt?
jQuery godt nok...
> Anyways, din løsning er ikke skudsikker, ligesom min eller andres ikke
> er det - men jeg synes ikke det er en god løsning at lade klienterne stå
> for optælningen. Det burde være rent serverside.
Nu snakkede du om processorkraft oppe i toppen, når man laver rent
serverside løsninger, så har man jo kun den ene processor at arbejde
med, når man arbejder med ajax, så har man faktisk 2 processorer man kan
arbejde med, selvfølgelig skal man lige sørge for at klientens processor
ikke er verdens hurtigste altid.
Men men, hvorfor skal jeg se at jeg er den eneste der er inde på en
side, fuldstændig ligegyldig besked, og hvis det er et socialt side, så
betyder det bare at det er et site man hopper MEGET hurtigt forbi.
Før det egentlig rigtig kan betale sig at have sådan en "personer online
nu" ting er først når man begynder at have min. 200-250 besøgende
konstant - ellers så smutter folk bare hurtigt igen.
PS
Det skal lige siges at det eneste tidspunkt jeg bruger min løsning er
ved chat systemer, da det er lidt mere afhængigt af at det er det
rigtige resultat, da man får point jo længere tid man er aktiv, og aktiv
i dette tilfælde er 30 sekunder, så her der reloader javascriptet efter
30 sekunder.
| |
Dan Storm (05-07-2008)
| Kommentar Fra : Dan Storm |
Dato : 05-07-08 16:54 |
|
Martin skrev:
>> Jeg synes ikke forslaget er særligt godt - at have klienten til at
>> lave en forespørgsel på serveren hvert sekund, vil unægteligt kræve
>> både trafik og processerkraft (uanset størrelsen af begge).
>
> Trafikken skulle da gerne være unlimited, på en anstændig host, det
> burde man ikke bekymre sig om.
Du svarer ikke på min kommentar idet jeg henviser til klienten, ikke
serveren.
>
> Processorkraften, tjaaa - der skal selvfølgelig lige laves noget cronjob
> eller lign, så visitor filen ikke bliver alt for stor, men ellers så
> tager det en 1.6ghz server at køre denne fil igennem (hvis filen er på
> 1mb) på 0.2 sek.
Igen, jeg tænker på klienten...
> I disse web 2.0 dage, så er der næsten ingen større sider man rigtig kan
> navigere rundt på uden at have javascript slået til.
>
> Så mit gæt er på at det efterhånden kun er tekstbaseret browsere (lynx
> osv) som ikke læser javascript.
Det er et spørgsmål om religion.
>
>> Og er syntaksen ikke også noget Prototype skidt?
>
> jQuery godt nok...
Hip som hap...
>> Anyways, din løsning er ikke skudsikker, ligesom min eller andres ikke
>> er det - men jeg synes ikke det er en god løsning at lade klienterne
>> stå for optælningen. Det burde være rent serverside.
>
> Nu snakkede du om processorkraft oppe i toppen, når man laver rent
> serverside løsninger, så har man jo kun den ene processor at arbejde
> med, når man arbejder med ajax, så har man faktisk 2 processorer man kan
> arbejde med, selvfølgelig skal man lige sørge for at klientens processor
> ikke er verdens hurtigste altid.
Lige præcis; Min svigermor (i know, målgruppen har naturligvis også lidt
at sige) har f.eks. en ældre computer, dog stadig XP med 1GB RAM. Hendes
maskine går nærmest i stå når AJAX eksekveres - Live search eller
autoopdatering af indhold. Årsagen kan være mange, man skal bare huske
på at disse oplevelser vil findes for andre brugere - som derefter nok
ikke vil besøge siden igen fordi deres maskine tilnærmelsesvis dør.
Selvfølgelig er det også afhængig af javascript koden (inden jeg lige
får hug for det)...
>
> Men men, hvorfor skal jeg se at jeg er den eneste der er inde på en
> side, fuldstændig ligegyldig besked, og hvis det er et socialt side, så
> betyder det bare at det er et site man hopper MEGET hurtigt forbi.
>
> Før det egentlig rigtig kan betale sig at have sådan en "personer online
> nu" ting er først når man begynder at have min. 200-250 besøgende
> konstant - ellers så smutter folk bare hurtigt igen.
Ganske enig; i det hele taget synes jeg 'antal besøgende' og 'antal
online' kan være en dræber for ethvert websted...
> PS
> Det skal lige siges at det eneste tidspunkt jeg bruger min løsning er
> ved chat systemer, da det er lidt mere afhængigt af at det er det
> rigtige resultat, da man får point jo længere tid man er aktiv, og aktiv
> i dette tilfælde er 30 sekunder, så her der reloader javascriptet efter
> 30 sekunder.
30 sekunder er jo også en anden sag...
| |
Martin (06-07-2008)
| Kommentar Fra : Martin |
Dato : 06-07-08 01:23 |
|
Dan Storm wrote:
> Martin skrev:
>>> Jeg synes ikke forslaget er særligt godt - at have klienten til at
>>> lave en forespørgsel på serveren hvert sekund, vil unægteligt kræve
>>> både trafik og processerkraft (uanset størrelsen af begge).
>>
>> Trafikken skulle da gerne være unlimited, på en anstændig host, det
>> burde man ikke bekymre sig om.
>
> Du svarer ikke på min kommentar idet jeg henviser til klienten, ikke
> serveren.
>
>>
>> Processorkraften, tjaaa - der skal selvfølgelig lige laves noget
>> cronjob eller lign, så visitor filen ikke bliver alt for stor, men
>> ellers så tager det en 1.6ghz server at køre denne fil igennem (hvis
>> filen er på 1mb) på 0.2 sek.
>
> Igen, jeg tænker på klienten...
Nu er der så vidt jeg lige husker, stortset fri trafik på alle internet
abb. (når Telia engang får taget dem sammen og sælger iPhone med fri
trafik!!!)
>
>> I disse web 2.0 dage, så er der næsten ingen større sider man rigtig
>> kan navigere rundt på uden at have javascript slået til.
>>
>> Så mit gæt er på at det efterhånden kun er tekstbaseret browsere (lynx
>> osv) som ikke læser javascript.
>
> Det er et spørgsmål om religion.
igoogle og stortset alle andre af googles applikationer, DR.dk, TV2.dk,
live.com, arto.dk (hvis man er til den målgruppe..) alle disse og en
fandens masse andre er hoppet på web 2.0 vognen
>
>>
>>> Og er syntaksen ikke også noget Prototype skidt?
>>
>> jQuery godt nok...
>
> Hip som hap...
Tjaaa - nogle kan lide at arbejde med frameworks andre kan ikk, som
professionel udvikler så er skønt ikke at skulle skrive så meget, men
genbruge tingene :)
>
>>> Anyways, din løsning er ikke skudsikker, ligesom min eller andres
>>> ikke er det - men jeg synes ikke det er en god løsning at lade
>>> klienterne stå for optælningen. Det burde være rent serverside.
>>
>> Nu snakkede du om processorkraft oppe i toppen, når man laver rent
>> serverside løsninger, så har man jo kun den ene processor at arbejde
>> med, når man arbejder med ajax, så har man faktisk 2 processorer man
>> kan arbejde med, selvfølgelig skal man lige sørge for at klientens
>> processor ikke er verdens hurtigste altid.
>
> Lige præcis; Min svigermor (i know, målgruppen har naturligvis også lidt
> at sige) har f.eks. en ældre computer, dog stadig XP med 1GB RAM. Hendes
> maskine går nærmest i stå når AJAX eksekveres - Live search eller
> autoopdatering af indhold. Årsagen kan være mange, man skal bare huske
> på at disse oplevelser vil findes for andre brugere - som derefter nok
> ikke vil besøge siden igen fordi deres maskine tilnærmelsesvis dør.
1gb ram og XP, så er det nok mere computeren der er noget i vejen med :)
Men det er godt nok ikke mange som kører med ældre computere end 3 år
gamle, (3 år siden var dengang hvor AMD havde de "bedste" processorer -
de lå vist dengang på omkring 2.0 ghz)
>
> Selvfølgelig er det også afhængig af javascript koden (inden jeg lige
> får hug for det)...
Nemlig... og det er her at frameworks kommer ind i billedet, om man så
bruger jQuery, prototype, YUI eller en af de mange andre er så en smagssag.
Og sådan er det altså også i PHP verdenen, her fortrækker jeg helt klart
selv at skrive op imod Zend Framework og MVC strukturen.
>> Men men, hvorfor skal jeg se at jeg er den eneste der er inde på en
>> side, fuldstændig ligegyldig besked, og hvis det er et socialt side,
>> så betyder det bare at det er et site man hopper MEGET hurtigt forbi.
>>
>> Før det egentlig rigtig kan betale sig at have sådan en "personer
>> online nu" ting er først når man begynder at have min. 200-250
>> besøgende konstant - ellers så smutter folk bare hurtigt igen.
>
> Ganske enig; i det hele taget synes jeg 'antal besøgende' og 'antal
> online' kan være en dræber for ethvert websted...
Helt enig - og det kan også være en dræber, selvom der er mange, men der
ikke kommer nye. Dette har jeg selv oplevet på et af de sites jeg
"bestyrerede"
>
>> PS
>> Det skal lige siges at det eneste tidspunkt jeg bruger min løsning er
>> ved chat systemer, da det er lidt mere afhængigt af at det er det
>> rigtige resultat, da man får point jo længere tid man er aktiv, og
>> aktiv i dette tilfælde er 30 sekunder, så her der reloader
>> javascriptet efter 30 sekunder.
>
> 30 sekunder er jo også en anden sag...
Spørgeren ville nok også selv teste det lidt, og måske også finde ud af
om antal sekunder skulle lidt op
| |
|
|