Avatar billede riversen Nybegynder
18. juli 2003 - 12:56 Der er 11 kommentarer og
1 løsning

antal brugere online

har kigget lidt rundt omkring og synes ikke jeg er blevet meget klogere.

Jeg vil gerne lave et script der kan vise online brugere på en hjemmeside. Det skal ikke være databasebaseret, så der er vel kun skrivning til fil tilbage...eller er der andre muligheder?

Skrivning til fil er ikke problemet, men hvordan tager man højde for at flere vil opdatere filen på samme tid og hvordan tælles der ned igen.

Jeg ønsker ikke links til scripts, men blot en forklaring på hvilke teknikker der ligger bag.
Avatar billede TRoXa Novice
18. juli 2003 - 13:01 #1
Du kan lave en <body onload="taelop()"; onunload="taelned()">

og så at den åbner txt filen, tager tallet der står deri og lægger 1 til og lukker filen igen .. og så omvendt med taelned funktionen ..

txt filer er okay .. men de er litd langsomme, men der skulle ikke være de store problemer i at fx 5 kommer ind samtidig .. det burde det være hurtig nok til :)
Avatar billede riversen Nybegynder
18. juli 2003 - 13:02 #2
troxa: men så snakker vi javascript eller hvad? Mener jeg har hørt/læst at onunload ikke altid bliver udført...
det skal helst være rimeligt skudsikkert, da det jo ellers vil blive mere og mere misvisende for hver gang der sker en fejl
Avatar billede TRoXa Novice
18. juli 2003 - 13:04 #3
der skal være java med i spillet ..

for at vaere helt sikker

så er onload god nok .. hvor den taeller op .. men i onunload bør du så lave en window.open('taelned.php') som kører en funktion der tæller 1 ned .. så blir det aktiveret :)
Avatar billede riversen Nybegynder
18. juli 2003 - 13:06 #4
troxa: hvorfor skal der java med i spillet? hvorfor er php ikke god nok?

Jeg er ikke med på hvad du mener mht. window.open
Avatar billede TRoXa Novice
18. juli 2003 - 13:08 #5
php kan ikke tjekke om man kommer ind på siden .. kun java kan .. man kan selvfølgelig i toppen af index filen lave den +1 funktion .. men php kan ikke selv tjekke om siden blir lukket ned, derfor skal man have lidt hjælp af java scripts

mht window.open er det også javascript

Window.Open('fil.php') = Den åbner et nyt vindue hvor den taeller 1 ned og så lukker vinduet sig selv igen med window.close (i den fil der blir sat til at poppe op)...

forstår du ?
Avatar billede riversen Nybegynder
18. juli 2003 - 13:10 #6
synes bare slet ikke det er lavet sådan i nogle af de scripts jeg har set
Avatar billede Slettet bruger
18. juli 2003 - 13:12 #7
riversen: Du bruger eksempelvis flock() funktionen, til at håndtere samtidighedsproblemerne.

flock reference: http://dk.php.net/flock

tutorial (kort): http://www.webclass.ru/eng/Tutorials/PHP/File_locking.html

Og der er ingen grund til at blande noget javascript ind i det. Du indsætter brugeren i filen, når han besøger siden, og ikke eksisterer i denne i forvejen. Eksisterer han i forvejen opdaterer du et timestamp (el. lign) for ham i filen. I samme operation sletter du brugere fra filen, hvor timestamp er ældre end eksempelvis 5 min.

Det er en måde.
Avatar billede TRoXa Novice
18. juli 2003 - 13:12 #8
jeg har aldrig set det anderledes :) udover hvis det har været med brugere med login og logud :)
Avatar billede riversen Nybegynder
18. juli 2003 - 13:16 #9
mercur8: ja, det er jo faktisk logisk nok, når jeg lige tænker over det. Men mht. flock...hvordan håndterer den situationer hvor en bruger fx lukker ned uden at release låsen. Eller hvis en brug hænger og holder filen låst.

while( !flock( ... ) )
{
  // bla bla
}

er vel lidt farligt principielt.
Avatar billede Slettet bruger
18. juli 2003 - 13:19 #10
Du skal ikke selv lave nogle løkker i den dur.
Når du beder om en lås til skrivning venter flock til at låsen kan frigives, før scriptet fortsættes.

Mht. til "situationer hvor en bruger fx lukker ned" ... sæt ignore_user_abort(true); Det burde løse det problem.
Avatar billede riversen Nybegynder
18. juli 2003 - 13:20 #11
mercur8: er der en timeout periode, hvor den så returnerer false

bare læg et svar
Avatar billede Slettet bruger
18. juli 2003 - 13:21 #12
Nej den retunerer ikke false, den "venter" bare, før den så retunerer - og scriptet fortsætter (ie. til linjen under, hvor du så skriver/læser til/fra filen).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester