Licznik odwiedzin, odporny na przeładowania strony
Vogel
$ip = $_SERVER["REMOTE_ADDR"];
$mysql = mysql_connect("host", "user", "password");
mysql_select_db("database", $mysql);
// usuwam userów dawnych
$sql = "DELETE FROM counter WHERE counter_time < ".(time()-36000);
mysql_query($sql);
// sprawdzam, czy aktualny nie został usunięty (był na stronie w czasie 10 min)
$sql = "SELECT counter_time FROM counter WHERE counter_ip = '".$ip."'";
$result = mysql_query($sql);
// aktualizacja lub dodanie rekordu
if (mysql_fetch_row($result)) {
$sql = "UPDATE counter SET counter_time=".time()." WHERE counter_ip = ".$ip;
mysql_query($sql);
} else {
$sql = "INSERT INTO counter (counter_time, counter_ip) VALUES ('".time()."', '".$ip."')";
mysql_query($sql);
// zwiększenie licznika
$sql = "UPDATE site_info SET counter=counter + 1";
mysql_query($sql);
}
// wyświetlenie licznika
$sql = "SELECT counter FROM site_info";
$result = mysql_fetch_array(mysql_query($sql));
$counter = $result["counter"];
mysql_close($mysql);
Zasada jest prosta: zapisuję adresy IP osób, i czas, w którym ostatio weszły na stronę/podstronę. Jeżeli ktoś nie wszedł przez 10 min to jest usuwany z listy, i może być policzony jeszcze raz. Jeżeli wszedł w tym czasie, to aktualizuję czas.
Alternatywna wersja
Pozwolilem sobie troszkę modyfikować licznik Kolegi. Wprowadziłem małe poprawki rzeczy które u mnie nie działały :)
Inicjalizacja bazy danych
CREATE TABLE `counter` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`counter_time` VARCHAR( 25 ) NOT NULL ,
`counter_ip` VARCHAR( 15 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE TABLE `site_info` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`counter` INT( 15 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
INSERT INTO site_info VALUES ('', '"0"');
Kod licznika
<?
$ip = $_SERVER["REMOTE_ADDR"];
# połączenie z bazą
include('polanczenie.php');
// usuwam userów dawnych
$sql = "DELETE FROM counter WHERE counter_time < ".(time()-36000);
mysql_query($sql);
// sprawdzam, czy aktualny nie został usunięty (był na stronie w czasie 10 min)
$sql = "SELECT counter_time FROM counter WHERE counter_ip = '".$ip."'";
$result = mysql_query($sql);
// aktualizacja lub dodanie rekordu
if (mysql_fetch_row($result)) {
$sql = "UPDATE counter SET counter_time='".time()."' WHERE counter_ip = '".$ip."'";
mysql_query($sql);
} else {
$sql = "INSERT INTO counter (counter_time, counter_ip) VALUES ('".time()."', '".$ip."')";
mysql_query($sql);
// zwiększenie licznika
$sql = "UPDATE `site_info` SET `counter`=`counter` + 1";
mysql_query($sql);
}
// wyświetlenie licznika
$sql = "SELECT counter FROM site_info";
$result = mysql_fetch_array(mysql_query($sql));
$counter = $result["counter"];
echo "odwiedzin stron było: $counter";
?>
Licznik odporny na przeładowania strony na 10 minut, po każdym przeładowaniu strony czas jest ponownie liczony od zera na kolejne 10 minut. Czas można ustawić wedlug uznania, ja sobie ustawiłem
<?php
$sql = "DELETE FROM counter WHERE counter_time < " . (time() - 144000);
Sprawdź darmowy skrypt PHP + komponent flash fcounter
http://www.flashstar.pl/f/fcounter/
Mały(2,5KB) odporny na odświerzanie (sesje), ładny(można podstawić swoje grafiki), bez reklam i łatwy w instalacji.
Kod powinien wyglądać tak:
<?php $ip = $_SERVER["REMOTE_ADDR"]; $mysql = mysql_connect("localhost", "foruum_strona", "1356892"); mysql_select_db("foruum_strona", $mysql); // usuwam userów dawnych $sql = "DELETE FROM counter WHERE counter_time < ".(time()-36000); mysql_query($sql); // sprawdzam, czy aktualny nie zosta³ usuniêty (by³ na stronie w czasie 10 min) $sql = "SELECT counter_time FROM counter WHERE counter_ip = '".$ip."'"; $result = mysql_query($sql); // aktualizacja lub dodanie rekordu if (mysql_fetch_row($result)) { $sql = "UPDATE counter SET counter_time=".time()." WHERE counter_ip = ".$ip; mysql_query($sql); } else { $sql = "INSERT INTO counter (counter_time, counter_ip) VALUES ('".time()."', '".$ip."')"; mysql_query($sql); // zwiêkszenie licznika $sql = "UPDATE site_info SET counter=counter + 1"; mysql_query($sql); } // wyœwietlenie licznika $sql = "SELECT counter FROM site_info"; $result = mysql_fetch_array(mysql_query($sql)); $counter = $result["counter"]; mysql_close($mysql); ?>I z tego co widać to jest oparty na sql więc dopisz jaki zapytania trzeba wykonać!
a jak to samo zrobic na plikach?
hmm.. moim zdaniem należałoby to zrobić jednak na sesjach+ostatni ip, gdyż wtedy mamy pewność - jeżeli strona to np. internetowa biblia :), to jak ktoś sobie będzie chciał poczytać, to posiedzi dłużej niż 10min.