Toon posts:

[PHP] de perfecte counter......

Pagina: 1
Acties:
  • 131 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik ben nou PHP aant leren, ben nog net n00b(bijna niet meer :P ).
ik ben bezig om een counter te maken voor mijn site.
hij telt al hoeveel bezoekers er zijn geweest.
nou wil ik dit als count.txt hebben
code:
1
2
3
EI=0
WIN95=0
COUNT=0

er komt veel meer in maar dat ga ik nu niet typen.
nou zit ik met 1 probleem.
in QBASIC ging het zo
code:
1
2
3
4
5
6
7
OPEN "count.txt" for input as #1
i% = 1
DO
LINE INPUT #1, line$[i%]
i% = i% + 1
LOOP UNTIL EOF(1)
CLOSE #1

dan had ik alle lijnen in n line$[i%]
maar hoe doe ik dit in PHP?
dus iedere lijn in een textbestand in een $line[nr] zetten, hoe?

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Een van de file open functies van php doet dit voor je, volgens mij is dat gewoon file().

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Ik had het bij het juiste eind.

http://www.php.net/manual/en/function.file.php

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
En als nou 2 mensen tegelijkertijd je pagina openen? Dat staat hij of weer op null of je krijg een error :)

Verwijderd

Topicstarter
en ik maar denken dat het met fopen moest.

Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 13:35 schreef Nielsz het volgende:
En als nou 2 mensen tegelijkertijd je pagina openen? Dat staat hij of weer op null of je krijg een error :)
.
zou je denken?

  • Nikel
  • Registratie: Juli 2000
  • Niet online
Dan gaat er niet zo veel fout hoor denk ik. Hij negeert de ene hooguit doordat die wordt overschreven.

Verwijderd

Ik zou ook even naar http://php.net/flock kijken als ik jou was (om corrupted data te voorkomen).

Verwijderd

Topicstarter
code:
1
WIN=0|EI55=0|COUNT=0

kan het ook zo?
zoja hoe open ik het dan?
ik snap niet echt hoe het wel moet :(
iemand voorbeeldje?(geen scriptrequest)

Verwijderd

Op vrijdag 25 januari 2002 15:29 schreef KingOfDos het volgende:
code:
1
WIN=0|EI55=0|COUNT=0

kan het ook zo?
zoja hoe open ik het dan?
ik snap niet echt hoe het wel moet :(
iemand voorbeeldje?(geen scriptrequest)
http://php.net/explode

Verwijderd

MySQL database, teller in text file is ranzig, bovendien kan je niet voorkomen dat bepaalde mensen het op internet zien (of je moet met rechten kutten, maar dat is ook niet alles)...

Verwijderd

Je wilt een DB in een file oftewel een flat-db :)

gebruik zoals aangegeven explode om data te extracten en save je db op bv deze manier

x;xx;xxx

met ; als split character, dit betekend wel dat ; in je texten uitgesloten of geremoved moeten worden anders krijg je problemen :)

Verwijderd

Topicstarter
PHP:
1
2
3
4
<?
$rdata = "powergamez.com;irule;1234567890";
$rdata2 = explode(";", $rdata);
?>

dan krijg ik
$rdata[1] met inhoud 'powergamez.com'
$rdata[2] met inhoud 'irule'
$rdata[3] met inhoud '1234567890'

werkt het zo?
of anders?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op vrijdag 25 januari 2002 18:34 schreef KingOfDos het volgende:
um een beetje zelf testen mag wel hoor :)
goh hoe weet hij dat ??
$rdata[ != $rdata2[ :)


anders is dit gewoon een request topic

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
ok alles werkt tot nu toe.
ik zie nu alles wat ik wil zien.

hoe kan ik een TAARTGRAFIEK maken? met het aantal % dat EI4/EI5/EI55/EI6/NS5/NS6/OPERA weergeeft in stukken?
is daar een functie voor?

mischien iets in javascr.? of gewoon in php?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Voor een taartgrafiek, zal het wel moeilijk gaan met HTML, een staafgrafiek lukt wel :)

Het zal dan waarsch dan ook moeten dmv een mooi plaatje gemaakt door GD (php)

[edit] WTF is EI eigenlijk? nieuw?

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 22-08 21:35

Niek

f.k.a. The_Surfer

Op vrijdag 25 januari 2002 20:06 schreef KingOfDos het volgende:
ok alles werkt tot nu toe.
ik zie nu alles wat ik wil zien.

hoe kan ik een TAARTGRAFIEK maken? met het aantal % dat EI4/EI5/EI55/EI6/NS5/NS6/OPERA weergeeft in stukken?
is daar een functie voor?

mischien iets in javascr.? of gewoon in php?
Daar is JpGraph (http://www.aditus.nu/jpgraph/) erg geschikt voor.

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 20:20 schreef The_Surfer het volgende:

[..]

Daar is JpGraph (http://www.aditus.nu/jpgraph/) erg geschikt voor.
cools ;)

Verwijderd

Topicstarter
ok mensen, test dit ff voor mij. vooral met unix/linux/macOS en andere browser dan IE.
tnx
http://www.powergamez.com/cowebmaster/site/test.php

  • KnEuTeR
  • Registratie: Mei 2000
  • Laatst online: 24-02-2024

KnEuTeR

iedereen heeft een handelsmerk

Op zaterdag 26 januari 2002 13:46 schreef KingOfDos het volgende:
ok mensen, test dit ff voor mij. vooral met unix/linux/macOS en andere browser dan IE.
tnx
http://www.powergamez.com/cowebmaster/site/test.php
lekkere oneerlijke teller..!!!

elke refresh gaat ie eentje hoger, je moet fff een cookie zetten of een database met alle IP's anders is ie een beetje corrupt, maar hij WERKT wel GOED tot zo ver wat je wou..!!

Computers ain't that smart, Whatever man built could be taken apart


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:22

crisp

Devver

Pixelated

Op zaterdag 26 januari 2002 13:53 schreef KnEuTeR het volgende:

[..]

lekkere oneerlijke teller..!!!

elke refresh gaat ie eentje hoger, je moet fff een cookie zetten of een database met alle IP's anders is ie een beetje corrupt, maar hij WERKT wel GOED tot zo ver wat je wou..!!
Je kan ook met sessies werken...

Intentionally left blank


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op zaterdag 26 januari 2002 13:46 schreef KingOfDos het volgende:
ok mensen, test dit ff voor mij. vooral met unix/linux/macOS en andere browser dan IE.
tnx
http://www.powergamez.com/cowebmaster/site/test.php
hij herkent mijn OS X bak niet. tsk.

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Op vrijdag 25 januari 2002 20:20 schreef The_Surfer het volgende:

[..]

Daar is JpGraph (http://www.aditus.nu/jpgraph/) erg geschikt voor.
werkt niet echt.(en is ook heel groot, 2MB)
dan maar gewoon n banketstaafgrafiek
hoe zou ik die kunnen maken? ik heb geen idee hoe,

totaal(van alles bij elkaar) / 100
getal / die 1% en ik heb het % van dat getal(ofzo :P )

Verwijderd

Topicstarter
PHP:
1
2
3
<?
$barLine = "[img]\"poll_left.gif\"[/img][img]\"poll_middle.gif\"[/img][img]\"poll_right.gif\"[/img]";
?>

ok dit heb ik al
dan is $barWide gewoon het aantal %
open met echo, etc.etc.etc.
maar hoe kan ik het berekenen?

Verwijderd

Topicstarter
niemand ideE?

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Hier is een counter sript dat ik zelf hebt gemaakt.
Werk best goed. je hebt wel een MySql database nodig.
Het werkt als volgd :
Wanneer iemand voor het eerst ergens op je pagina binnen komt wordt er een sessie variabele counter aangemaakt. En wordt er een rij voor deze pagina in de datbase geinsert.
Waneer je nu nog een keer op dezelfde pagina komt word er in diezelfde rij een hit bijgeteld. Wanneer je in dezelfde sessie zit, maar dan een uur later dezefde pagina oproept word er een nieuwe row geinsert.
En dit geld voor elke pagina waar de dit ding opzet.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?
if (isset($counter))
    unset($counter);
session_start();
session_register("counter");
if (isset($counter))
    $counter -> hit($REMOTE_ADDR,$REMOTE_HOST,$HTTP_USER_AGENT,$PATH_TRANSLATED);
else
{
    $counter = new Counter(); 
    $counter -> hit($REMOTE_ADDR,$REMOTE_HOST,$HTTP_USER_AGENT,$PATH_TRANSLATED);
}

class Counter
{
    var $remoteAdress = "";
    var $remoteHost = "";
    var $remoteUserAgent = "";
    var $pages ;  /* key = PATH_TRANSLATED
                                    0 = Nbo Hits
                                    3 = Last Visit
                                */
    var $timeout = 1500;//sec
    var $nbopages = 0;
    var $session = -1;
    

    function Counter()
    {
                 
    }
    
    
    function hit($REMOTE_ADDR,$REMOTE_HOST,$HTTP_USER_AGENT,$PATH_TRANSLATED)
    {
        $this -> connectdb();
    
        if ($this -> remoteAdress == "" || $this -> remoteHost == "" || $this -> remoteUserAgent == "")
        {
            $this -> remoteAdress = $REMOTE_ADDR;
            $this -> remoteHost = $REMOTE_HOST;
            $this -> remoteUserAgent = $HTTP_USER_AGENT;
        }    
        
        if (!IsSet ($this -> pages[$PATH_TRANSLATED]) || time() - $this -> pages[$PATH_TRANSLATED] [2]   > $this -> timeout )
        {
            $this -> pages[$PATH_TRANSLATED] [1] = 1;
            $this -> pages[$PATH_TRANSLATED] [2] = time();
            $query ="INSERT INTO count (pathTranslated,session,remoteAdress,remoteHost,remoteUserAgent,nboHits,startTime,stopTime) 
                     VALUES  ('$PATH_TRANSLATED',".$this -> session .",'$REMOTE_ADDR','$REMOTE_HOST','$HTTP_USER_AGENT'," .$this -> pages[$PATH_TRANSLATED] [1].",NOW(),NOW())";
              mysql_query($query) ;
           $id =  mysql_insert_id();
           $this -> pages[$PATH_TRANSLATED] [0] = $id;
           
           if ($this -> session < 0)
           {
                   $this -> session =  $id;
                $query = "UPDATE count SET session=$id WHERE Number=$id";
                mysql_query($query) ;
           }
           
        }
        else 
        {
                $this -> pages[$PATH_TRANSLATED] [1] += 1;
                $this -> pages[$PATH_TRANSLATED] [2] = time();
                $query ="UPDATE count SET nboHits = ".($this -> pages[$PATH_TRANSLATED] [1] ) ." ,
                                stopTime = NOW() WHERE Number= ".$this -> pages[$PATH_TRANSLATED] [0] ;
                mysql_query($query) ;
        }
    }
    
    
    function connectdb()
    {    
        $hostname     = "127.0.0.1";
        $user        = "";
        $pass        = "";
        $database      = "counter";
        mySql_connect($hostname,$user,$pass);
        mySql_select_db($database);
    }

}
?>

De database ziet er zo uit :
code:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE count (
  Number int(11) NOT NULL auto_increment,
  Session int(11) NOT NULL default '0',
  pathTranslated tinytext NOT NULL,
  remoteAdress tinytext NOT NULL,
  remoteHost tinytext NOT NULL,
  remoteUserAgent tinytext NOT NULL,
  nboHits int(11) NOT NULL default '0',
  startTime datetime NOT NULL default '0000-00-00 00:00:00',
  stopTime datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY (Number)
) TYPE=MyISAM;

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 14-09 12:05

Tuinhark

Retro

chem: hij herkent mijn OS X bak niet. tsk.

En mijn Links browsertje ook al niet... tsk.

:Y)

Verwijderd

Topicstarter
ok mensen
http://www.powergamez.com/cowebmaster/site/avatar/avatar.php?use=stat dat zijn de STATS!

(deze counter is nu ff voor mijn avatar, maar daalijk ook op de rest van mijn site)

[edit=typo]

Verwijderd

Op zondag 27 januari 2002 13:43 schreef vgouw het volgende:
[...]
is niet zo'n goed systeem imho. Stel je krijgt 2000 unieke bezoekers op een dag, dan heb je op een dag 2000 nieuwe rows... Dan heb je binnen een maand 30 * 2000 = 60.000 nieuwe rows... Dat is erg onoverzichtelijk en het duurt ontzettend lang voordat de statistieken zijn berekent...

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
JE teller van linux klopt niet helemaal, als ik met lynx :) ernaar toe ga wordt komt er wel 1tje bij bij lynx, maar niet bij linux!

...


Verwijderd

Topicstarter
Op dinsdag 05 februari 2002 10:56 schreef Haranaka het volgende:
JE teller van linux klopt niet helemaal, als ik met lynx :) ernaar toe ga wordt komt er wel 1tje bij bij lynx, maar niet bij linux!
hij heeft gewerkt
maar ik zal ff een nieuw systeem maken voor GoT
want dit is mijn icoon stat

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 22-08 21:35

Niek

f.k.a. The_Surfer

Ik heb ook een eigen counter, namelijk mijn icon. De stats staan hierzo.

Ik heb gemerkt dat het veel handiger is om voor de browser- en os-detectie een gespecialiseerd script (zoals phpSniff) te gebruikt, i.p.v. zelf iets te maken.

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Op vrijdag 25 januari 2002 20:16 schreef Glimi_ie het volgende:

[edit] WTF is EI eigenlijk? nieuw?
Da's de "Ethernet Imploder", het tegenovergestelde van de "Internet Exploder" :)

  • Battle Bunny
  • Registratie: Oktober 2001
  • Laatst online: 02-02 21:41
Oh, en je stats kloppen niet. Hij ziet Mozilla als "nothingness" :)

Oftewel: er komt geen tel bij Mozilla :'(

Verwijderd

Topicstarter
installing PHPSNIFF!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?
########## OperatingSystem
       if (stristr($HTTP_USER_AGENT, "NT 4")) { $os = "Win NT 4"; }
       elseif (stristr($HTTP_USER_AGENT, "5.1")) {$os = "Win XP";}
       elseif (stristr($HTTP_USER_AGENT, "NT 5")) {$os = "Win 2000";}
       elseif (stristr($HTTP_USER_AGENT, "4.90"))  {$os = "Win ME"; }
       elseif (stristr($HTTP_USER_AGENT, "98"))  {$os = "Win 98";}
       elseif (stristr($HTTP_USER_AGENT, "Linux")) {$os = "Linux";}
       elseif (stristr($HTTP_USER_AGENT, "Unix"))  {$os = "Unix";  }
       elseif (stristr($HTTP_USER_AGENT, "Mac"))  {$os = "Macintosh";}
       else if (eregi("Linux ([0-9.]+)", $HTTP_USER_AGENT, $regs)){$os = "Linux ".$regs[1];}
       else if (eregi("Linux", $HTTP_USER_AGENT, $regs)){$os = "Linux";}
       else if (eregi("mdk for ([0-9]\.[0-9])", $HTTP_USER_AGENT, $regs)){$os = "Linux MDK ".$regs[1];}
       else if (eregi("mdk", $HTTP_USER_AGENT, $regs)){$os = "Linux MDK";}
       else if (eregi("win|windows", $HTTP_USER_AGENT)){$os = "Windows";}
       else if (eregi("konqueror/(([0-9]*\.[0-9]*\.[0-9]*)|([0-9]*\.[0-9]*))", $HTTP_USER_AGENT, $regs)){$os = "Linux";}
       else{$os = "Onbekend besturingssysteem";}
       if (eregi("win", $os)) { $oskort = "Windows"; ++$count[0]; }
       else if (eregi("Linux", $os)) { $oskort = "Linux"; ++$count[1]; }
       else if (eregi("MacOS", $os)) { $oskort = "MacOS"; ++$count[2]; }
       else { $oskort = "Onbekend"; ++$count[3]; }
######### Browser
        if (eregi("msie ([0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = "Internet Explorer ".$regs[1]; }
        else if (eregi("konqueror/([0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = "Konqueror ".$regs[1]; }
        else if (eregi("netscape([0-9]*/[0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = "Netscape ".$regs[1]; }
        else if (eregi("^mozilla/([0-9].?.[0-9][0-9]|[0-9].?.[0-9]|[0-9])", $HTTP_USER_AGENT, $regs)) {
        if( eregi(" (m[0-9]*)", $HTTP_USER_AGENT, $regs2)|| eregi("gecko", $HTTP_USER_AGENT)) { $browser = "Mozilla ".$regs[1]; }
        else { $browser = "Netscape ".$regs[1]; }
        }
        else if (eregi("mozilla .([0-9]*)", $HTTP_USER_AGENT, $regs)) { $browser = "Moz. ".$regs[1]; }
        else if (eregi("Opera/([0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = "Opera ".$regs[1]; }
        else if (eregi("Lynx/([0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = "Lynx ".$regs[1]; }
        else if (eregi("(^[a-zA-Z]+)/([0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = $regs[1]." ".$regs[2]; }
        else if (eregi("(^[a-zA-Z]+) ([0-9.]+)", $HTTP_USER_AGENT, $regs)) { $browser = $regs[1]." ".$regs[2]; }
        else if (eregi("(^[a-zA-Z]+)", $HTTP_USER_AGENT, $regs)) { $browser = $regs[1]; }
        else { $browser = "Onbekende browser"; }
        if (eregi("Internet Explorer", $browser)) { $browserkort = "IExplorer"; ++$count[4];}
        else if (eregi("Mozilla", $browser)) { $browserkort = "Mozilla"; ++$count[5];}
        else if (eregi("Netscape", $browser)) { $browserkort = "Netscape"; ++$count[6];}
        else if (eregi("Opera", $browser)) { $browserkort = "Opera"; ++$count[7];}
        else if (eregi("Lynx", $browser)) { $browserkort = "Lynx"; ++$count[8];}
        else { $browserkort = "Onbekend"; ++$count[9];}
?>

zo bekijk is welk os het is.

Verwijderd

Topicstarter
hmm, na ff doorlezen merk ik een BUG op

  • Drop
  • Registratie: September 2001
  • Laatst online: 19-02-2022
Op zondag 27 januari 2002 13:21 schreef KingOfDos het volgende:
niemand ideE?
Jah! Nokken ermee, niet het wiel opnieuw uitvinden. Er zijn mensen die het al gebouwd hebben.

Wilde zelf ook een teller voor mijn site maken (Perl, FlatFileDB, etc). Had na een tijdje eindelijk een leuk tellertje in elkeer gedraaid, maar echt toppie werken deed het niet.

Heb nu een tellertje bij CheckStat (www.checkstat.nl). Voor die 2 euro per maand bespaart mij dat uren werk en dat ding werkt nog goed ook. :) Laterz...
Pagina: 1