Vydrusův zápisník

postřehy ze světa internetu a IT

co jsem zač?

Avatar - vydraMá přezdívka je Vydrus. Zaměřuji se na webové technologie a IT. Jsem velký fanoušek GNU/Linuxu, pracuji na Ubuntu.

Složitější počítadlo přístupů v PHP

Pokud jste na netu hledali skript počítadla, jako má Toplist (Netagent, VšeVJednom, Weblight) a žádný jste nenašli, nedivte se. Takové programy se na netu zadarmo zpravidla nevyskytují. Já však zde uvádím vlastní počítadlo, které je ještě lepší než Toplist a narozdíl od ostatních funguje. :-)

Toto počítadlo životně potřebuje MySQL databázi, takže pokud ji nemáte, jste namydlení. Ukládá statistiky pro den, měsíc, celkem a online počet lidí. Počítadlo je textové, ne grafické, jako u klasických počítadel – lze si tedy nastylovat vlastní fonty, barvy a další vlastnosti. Program zaznamenává unikátní IP za den.

Skript, který poskytuji, se skládá z automatické instalace pomocí souboru install.php a samotného souboru s počítadlem – pocitadlo.php. Pro instalaci i spojení do databáze jsou samozřejmě potřeba vaše přihlašovací údaje.

První krok – instalace pomocí souboru install.php
Zkopírujte si následující kód, vložte ho do samostatného souboru install.php, který potom obnovte v prohlížeči (tím se automaticky zapíšou tabulky do MySQL DB). Po úspěšném zapsání tento soubor můžete smazat.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//pripojeni do DB
$spojeni=mysql_connect ("server", "username", "heslo") or
die ("Nepodařilo se připojit k DB.");
mysql_select_db ("jmeno-databaze") or
die ("Databáze pravděpodobně neexistuje.");
$sql="create table celkem(id integer primary key auto_increment,celkem int)";
mysql_query ($sql);
echo mysql_error()."<br />";
$sql="create table den(id integer primary key auto_increment,ip varchar(15),doba int)";
mysql_query ($sql);
echo mysql_error()."<br />";
$sql="create table mesic(id integer primary key auto_increment,ip varchar(15),doba int)";
mysql_query ($sql);
echo mysql_error()."<br />";
$sql="create table online(id integer primary key auto_increment,ip varchar(15),doba int)";
mysql_query ($sql);
echo mysql_error()."<br />";
$sql="insert into celkem (celkem) values ('0');";
mysql_query ($sql);
echo mysql_error();
?>

Druhý krok – soubor pocitadlo.php
Zkopírujte si následující kód, vložte ho do samostatného souboru pocitadlo.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
<?php
//pripojeni do DB
$spojeni=mysql_connect ("server", "username", "heslo") or
die ("Nepodařilo se připojit k DB.");
mysql_select_db ("jmeno-databaze") or
die ("Databáze pravděpodobně neexistuje.");
 
//deklarace funkci
        function spocti_lidi ($tabulka){
                $sql="select count(*) from $tabulka";
                @$r=mysql_query ($sql);
                if (@mysql_num_rows($r)){
                        $zaznam=mysql_fetch_row($r);
                        $pocet_lidi=$zaznam[0];
                }
                return $pocet_lidi;
        }
        function zapis_lidi ($tabulka, $cas, $limit, $ip){
                $sql="select ip from $tabulka where doba=($cas-$limit) or doba>$cas";
                @$r=mysql_query ($sql);
                if (mysql_num_rows($r)){
                        $sql="delete from $tabulka";
                        mysql_query ($sql);
                }
                $cas_dny=date ("j");
                $sql="select id from den where ip like '$ip' AND doba=$cas_dny";
                @$r=mysql_query ($sql);
                if (!mysql_num_rows($r)){
 
                                $sql2="insert into $tabulka (ip, doba) values ('$ip', '$cas')";
                                mysql_query ($sql2);
                }
 
        }
//celkem lidi
        $ip=$REMOTE_ADDR;
        $cas_dny=date ("j");
        $sql="select celkem from celkem";
        @$r=mysql_query ($sql);
        if (@mysql_num_rows($r)){
                $zaznam=mysql_fetch_row($r);
                $celkem=$zaznam[0];
        }
$sql="select id from den where ip like '$ip' AND doba=$cas_dny";
                @$r=mysql_query ($sql);
                if (!mysql_num_rows($r)){
                                $celkem++;
                                $sql2="update celkem set celkem=$celkem where id=1";
                                mysql_query ($sql2);
                }
//lidi online
        $cas_minuty=date ("i");
        $limit=10; //minut
        $sql="delete from online where doba<($cas_minuty-$limit) OR doba>$cas_minuty";
        mysql_query ($sql);
        $sql="select ip from online where ip like '$ip'";
        @$r=mysql_query ($sql);
        if (@mysql_num_rows($r)){
                $sql1="update online set doba='$cas_minuty' where ip like '$ip'";
                mysql_query ($sql1);
        }else{
                $sql2="insert into online (ip, doba) values ('$ip','$cas_minuty')";
                mysql_query ($sql2);
        }
//volani funkci pro zapsani novych navstev do databaze
        $cas_mesic=date ("n");
        $limit=1;//mesic
        zapis_lidi ("mesic", $cas_mesic, $limit, $ip);
        $cas_dny=date ("j");
        $limit=1;//den
        zapis_lidi ("den", $cas_dny, $limit, $ip);
//vypis lidi
        $den=spocti_lidi ("den");
        $online=spocti_lidi ("online");
        $mesic=spocti_lidi ("mesic");
 
echo "<table style=\"background-color: white; border: 1px solid #739240; width: 100px; margin: 0px; padding: 0px;\">
<tr><td colspan=\"2\" style=\"color: black; font-size: 11px; text-align: center; border-bottom: 1px solid #739240;\"><strong>Návštěvy</strong></td></tr>
<tr><td style=\"color: black; font-size: 10px;\">Celkem</td><td style=\"color: black; font-size: 11px; text-align: right;\">$celkem</td></tr>
<tr><td style=\"color: black; font-size: 10px;\">Měsíc</td><td style=\"color: black; font-size: 11px; text-align: right;\">$mesic</td></tr>
<tr><td style=\"color: black; font-size: 10px;\">Dnes</td><td style=\"color: black; font-size: 11px; text-align: right;\">$den</td></tr>
<tr><td style=\"color: #739240; font-size: 10px;\">Online</td><td style=\"color: black; font-size: 11px; text-align: right;\">$online</td></tr></table>";
?>

A nakonec do všech stránek, kde chcete, aby se počítadlo zobrazovalo, umístěte tento řádek:

1
<?php include ("pocitadlo.php"); ?>

Hotovo! Počítadlo by od teď mělo spolehlivě zaznamenávat všechny přístupy. A takhle vypadá:

Návštěvy
Celkem 1028493
Měsíc 41607
Dnes 1056
Online 21

Pokud se vám počítadlo líbí a chtěli byste na něj upozornit další uživatele, odkažte, prosím, na tento článek. Děkuju předem. :-)

Reklama: Netradiční čtení na téma půjčky naleznete na webu Bez půjčky

k dalšímu čtení

komentáře (11)

  1. hezky script.. :) necekal jsem ze bys neco takoveho pridal, nejdrive pocitadla kritizujes a pote na ne pises navod.. :o ) ale je pravd ze pocitadlo nemusi byt vubec umisteno na stranky a muze slouzit pouze pro admina.. ;o)

    Tom

  2. Tamten článek byl namířen proti serverům jako toplist.cz, netagent.cz a tak dále. Nemám nic proti vlastním počítadlům ;)

    A abych těmto službám udělal nějakou konkurenci, tak jsem tu dal tenhle prográmek, aby si ho všichni mohli dát na svoje stránky :D

    Vydrus

  3. Pozor na to,
    ten kod jsem jen tak sletnul, ale mas tam chybu(y)
    …right;\“>$celkem“.$celkem.“</td…
    kdyz nadefunuji tuto promenou, tka to vyhodi chybu-.

    Tomáš Smetka

  4. Mě to funguje bez problémů. Nemáš hrabat do kódu ;)

    Co s tím vlastně chceš dělat?

    Vydrus

  5. to je aky lamersky program :D otras, nedefinovane premenne a zistovat navstevy podla IP za jeden den, tak tomu hovorim brutalne nefer. U nas v meste mame ISP ktory ma navonok len 1 IP a za NATom pristupuje na net asi 800-900 ludi. To znamena ze 800 ludi v nasom meste ma rovnaku IP a ty to zaratas len ako jednu navstevu? :D :D:D:D otras

    hahahaha

  6. Tak prosím, prosím, vymysli nějaký lepší, a předej mi ho :) . Já ho sem dám a přidám link na autora.

    Zajímavé, že v ČR jsem asi jediný konkurent Toplistu, který poskytuje takovéhle počítadlo…

    Vydrus

  7. 2Vydrus: Zkus návštěvníka kontrolovat mimo IP i například přes cookies. Aktuální čas s datem by se uložilo do cookie a pak by se jen kontrolovalo, jak je (pokud je) cookie stará.

    Matty

  8. Nápad je to určitě dobrý, jen by to chtělo ošetřita a nemělo by to chybu.

    Tomáš Smetka

  9. Konkurence ale existuje. Počítadlo se statistikami detailů se dá stáhnout na http://www.php.jonweb.cz/skripty/statistika/ a jednoduché na http://www.php.jonweb.cz/skripty/pocitadlo/

    kvok

  10. Než začneš cokoliv prohlašovat za jakkoliv dobré, ba přímo konkurenční jinému programu, zkus se nejdřív podívat jestli nejsou i jiné alternativy.

    JSOU a je jich spousta. Jako začátek je tvůj skript docela dobrý, ale aby byl konkurenční, muselo by se na něm ještě hodně zapracovat. Jak po stránce programové tak funkční.

    Flexa

  11. Prosím tě o radu – chtěl bych toto počítadlo umístit na své stránky. Vše funguje, ale chtěl bych to nějak upravit, aby bylo schopno počítat stejnou IP adresu po 10 minutách.
    Zkoušel jsem to, ale výsledek nic moc. Můžeš poradit?

    Ross

zanechte komentář!

Komentáře jsou moderovány. Nevhodné příspěvky mohou být dle mého uvážení smazány. Pokud zde komentujete poprvé, musí být váš komentář nejprve schválen.

Náš sponzor: Na webu obálky a potisk obálek Vám nabízíme digitální tisk a potisk obálek. Nepotištěné obálky můžete u nás nakoupit za velkoobchodní ceny.