Licznik wskazujący liczbę osób akutalnie przeglądających stronę to przydatna sprawa :) Można dzieki niemu sprawdzić w jakich godzinach mamy największą oglądalność lub czy w ogole ktoś zagląda na naszą stronę. Gotowych rozwiązań tego zadania jest mnóstwo - ja przedstawię kolejne :P Opierać będę się jak zawsze na PHP oraz Mysqlu - to typowe 'wyposażenie' miejsc w których ten skrypt mógły być przydatny. Idea jest prosta a całość kodu to zaledwie kilka linijek. Sens działania wygląda w ten sposób:
- Zapisujemy w bazie danych adresy IP oraz datę wizyty wszystkich odwiedzajacych
- Za uzytkownikow on-line uznajemy tylko tych ktorzy weszli na strone w przeciągu np. ostatnich 3 minut (ten czas ustalamy sami)
- Dla porządku, wszystkie wpisy starsze niż 3 minuty usuwamy z bazy.
W ten sposób możemy uzyskąć liczbę osób która prawdopodobnie w tym samym czasie ogląda naszą stronę ;) Opcjonalnie, celem weryfikacji poprawnego działania, możemy wyświetlić listę adresów które obecnie przeglądają stronę.
Do dzieła...
Przed przystępieniem do zabawy zabawy musimy utworzyć nową tablicę w bazie danych w której bedziemy gromadzić będziemy informację o gościach. Wysatrczy że będzie się ona składać z dwóch pól przechowujących Adres IP oraz Date. Zdadnie możemy zrealizować jednym polecenie SQL:
CREATE TABLE `online` (
`ip` varchar(15) NOT NULL default '',
`date` time NOT NULL default '00:00:00',
PRIMARY KEY (`ip`)
) TYPE=MyISAM;
|
Założenie klucza na pole IP uczyni je unikatowym, przez co unikniemy duplikowania się tego samego adresu przy odswieżeniu strony oraz pisania dodatkowego kodu obsługującego to zajście :)
Teraz utworzymy plik php, który jako wynik zwróci napis 'On-line: xx' z liczbą gości.
Jego treść będzie wyglądać tak:
<?php
/* Laczymy sie z serwerem mysql */
$db = mysql_connect('localhost','root','');
/* i wybieramy baze danych */
mysql_select_db('webstuff',$db );
/*
Ustalamy czas od ostatniego polaczenia
po ktorym zostaniemy uznani za bycie on-line.
Tutaj 3*60 sek a wiec 3 minuty
*/
$old=date('H:i:s',time()-3*60);
/* Usuwamy wszystkie wpisy starsze niz 3 minuty - pozwoli to uniknac zasmiecania bazy */
mysql_query("DELETE FROM online WHERE date<'$old'" );
/* Ustalamy adres komputera ktory wszedl na strone */
$_SERVER=$HTTP_SERVER_VARS; $REMOTE_ADDR=$_SERVER['REMOTE_ADDR'];
/* Terazniejszosc */
$now=date('H:i:s',time());
/* Dodajemy nowego hosta do bazy wraz bierzaca godzina wizyty */
mysql_query("INSERT INTO online VALUES('$REMOTE_ADDR','$now')" );
/* Liczymy tych ktorzy zostali zapisani w ciagu ostatnich 3 minut */
$res=mysql_query("SELECT * FROM online WHERE date>'$old'" );
/* i wyswietlamy ich liczbe na ekranie */
echo 'On-line: <a href="?show">'.mysql_numrows($res).'</a><br>';
/* Dodatkowo mozemy wyswietlic liste osob aktualnie przegladajacych strone */
if (isset($_GET['show'])){
echo '<br><table cellspacing=0 cellpadding=0 ><tr><td>Lista gosci<br><br></td><td></td></tr>';
echo '<tr><td><b>IP</b></td><td><b>Data</b></td></tr>';
/* Kozystajac z faktu ze $res przechowuje ID wyniku wczesniejszego zapytania, wyswietlamy szczegolowe dane */
while($iplist=mysql_fetch_assoc($res)){
echo '<tr>';
echo '<td>'.$iplist['ip'].'</td>';
echo '<td>'.$iplist['date'].'</td>';
echo '</tr>';
}
echo '</table>';
echo '<br><a href="index.php">Ukryj</a>';
}
/* Zamykamy polaczenie z baza */
mysql_close($db );
?>
|
Jeśli wszystko przebiegło bez zakłóceń efekt powinień być podobny do tego (poproś kolegę aby wszedł tu razem z Toba ;) )