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
hezky script..
necekal jsem ze bys neco takoveho pridal, nejdrive pocitadla kritizujes a pote na ne pises navod..
) ale je pravd ze pocitadlo nemusi byt vubec umisteno na stranky a muze slouzit pouze pro admina.. ;o)
Tom
07. 09. 2008
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
Vydrus
07. 09. 2008
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
09. 09. 2008
Mě to funguje bez problémů. Nemáš hrabat do kódu
Co s tím vlastně chceš dělat?
Vydrus
09. 09. 2008
to je aky lamersky program
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 otras
hahahaha
09. 09. 2008
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
09. 09. 2008
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
11. 09. 2008
Nápad je to určitě dobrý, jen by to chtělo ošetřita a nemělo by to chybu.
Tomáš Smetka
11. 09. 2008
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
16. 09. 2008
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
24. 09. 2008
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
08. 04. 2009