Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Magazynowanie danych o odwiedzinach
Forum PHP.pl > Forum > PHP
lukasamd
Witam,
chciałbym w pewnym serwisie magazynować dane o odwiedzających użytkownikach - jako że są mi potrzebne informacje o unikalnych odwiedzinach, wolę zapisywać IP odwiedzających.

Pytanie, co jest lepsze - wrzucanie danych do bazy a potem sprawdzanie czy już tam są, czy zapis do pliku.


a) baza:
- wrzucenie do jednego pola jako xxx.xxx.xxx.xxx - wydaje mi się jednak, iż nie jest to zbyt dobre rozwiązanie
- podzielenie adresu na 4 części i wrzucenie do poszczególnych pól, przy sprawdzaniu czy adres jest już w bazie również podział i sprawdzanie każdego pola - każdy z warunków spowoduje odrzucenie sporej ilości danych.


c) plik
- podobnie do bazy danych, przy sprawdzaniu wczytuję plik jako tablicę (albo całe adresy, albo z podziałem).

Co jest lepsze? Wydaje mi się, że lepszym rozwiązaniem jest zrzucanie tego na bazę - robienie tablicy z powiedzmy 1-10k rekordami i jej przeszukiwanie w php raczej zbyt szybkie nie będzie.
mike
Cytat(lukasamd @ 30.10.2008, 09:00:26 ) *
- wrzucenie do jednego pola jako xxx.xxx.xxx.xxx - wydaje mi się jednak, iż nie jest to zbyt dobre rozwiązanie
Masz rację. Wydaje Ci się tongue.gif
Cytat(lukasamd @ 30.10.2008, 09:00:26 ) *
- podzielenie adresu na 4 części i wrzucenie do poszczególnych pól
Rozwiązanie pozbawione sensu.

Najlepszym rozwiązaniem jest baza danych. Jeśli chodzi o obawy to zastanów się po co powstały bazy danych? Po to by obsługiwać duże zbiory danych. Jakbyś miał tych rekordów milion czy więcej czy to może mógłbyś zacząć się zastanawaić. A 10000? To pierdnięcie dla bazy danych.
zegarek84
jeśli chcesz to trzymać w jednym pliku i na to co potrzebujesz spokojnie wystarczy Ci baza SQLite...
pinochet
takze adres mozesz na inta konwertowac jesli boisz sie o szybkosc wyszukiwania.
Jesli z jakis wzgledow masz opory przed bazą mozna tez stworzyc dla kazdego odwiedzającego nas adresu osobny plik.
Jednak jak juz koledzy wspomnieli BD jest duzo szybsza
lukas_nowicki
Jako że niedawno tworzyłem skrypt który zlicza unikalne wejścia podzielę się nim smile.gif

Wersja która zapisuje unikalne wejścia do bazy

  1. CREATE TABLE `Ip` (
  2. `Id` int(11) NOT NULL AUTO_INCREMENT,
  3. `Ip` char(15) NOT NULL DEFAULT '',
  4. PRIMARY KEY (`Id`)
  5. ) TYPE=MyISAM AUTO_INCREMENT=1 ;


  1. <?php
  2.  
  3. $ip=$_SERVER['REMOTE_ADDR'];//check IP
  4. $sql = mysql_connect ('server', 'user','password')or die(mysql_error();//connect to database
  5. $baza=mysql_select_db('IP_db')or die(mysql_error());//chose database
  6.  
  7. $sql_query = mysql_query("SELECT Ip FROM Ip WHERE Ip='$ip'")or die(mysql_error());//check IP in database
  8. $rows=mysql_num_rows($sql_query);//how many find
  9.  
  10. if ($rows)//if IP exist in database
  11.        {
  12.        echo "Your IP exist in our Database";
  13.        mysql_close($sql);//disconnect with database
  14.        }
  15. else//if IP does not exist in database
  16.        {
  17.        $sql_query = mysql_query("INSERT INTO Ip VALUES ('','$ip')")or die(mysql_error());//save IP in database
  18.        mysql_close($sql);//disconnect with database
  19.        echo "You are here first time";
  20.        }
  21.  
  22. ?>


Wersja, która zapisuje unikalne wejścia /24h

  1. CREATE TABLE `ip` (
  2. `Id` int(11) NOT NULL AUTO_INCREMENT,
  3. `Ip` char(15) NOT NULL DEFAULT '',
  4. `Data` char(10) NOT NULL DEFAULT '',
  5. PRIMARY KEY (`Id`)
  6. ) TYPE=MyISAM AUTO_INCREMENT=1 ;


  1. <?php
  2.  
  3. $ip=$_SERVER['REMOTE_ADDR'];//check IP
  4. $time = time();//Setup of time
  5.  
  6. $sql = mysql_connect ('server', 'user','password')or die(mysql_error();//connect to database
  7. $baza=mysql_select_db('IP_db')or die(mysql_error());//chose database
  8.  
  9. $sql_query = mysql_query("SELECT Ip FROM ip WHERE Ip='$ip'")or die(mysql_error());//check IP in database
  10. $rows=mysql_num_rows($sql_query);//how many find
  11.  
  12. if ($rows)//if IP exist in database
  13.        {
  14.        $sql_query = mysql_query("SELECT Data FROM Ip WHERE Ip='$ip'");
  15.        $ip_time = mysql_fetch_assoc($sql_query);//return query as associative array
  16.        $ip_time['Data'] = ($ip_time['Data']+86400);//Adding to last visit data 24h    (86400= 24h * 60min * 60sec)
  17.        if ($ip_time['Data'] < $time)//if Last visit was over 24-h ago
  18.                {
  19.                $sql_query = mysql_query("UPDATE Ip SET Data='$time' WHERE Ip='$ip'");//update last visit data
  20.                mysql_close($sql);//disconnect with database
  21.                echo "Welcome again - you was here over 24h ago";
  22.                }
  23.        else//if Last visit was less than 24-h ago
  24.                {
  25.                mysql_close($sql);//disconnect with database
  26.                echo "Welcome again - you was here less than 24h ago";
  27.                }
  28.        }
  29. else//if IP does not exist in database
  30.        {
  31.        $sql_query = mysql_query("INSERT INTO Ip VALUES ('','$ip')")or die(mysql_error());//save IP in database
  32.        mysql_close($sql);//disconnect with database
  33.        echo "You are here first time";
  34.        }
  35.  
  36. ?>


Przerobienie tego na Twoje potrzeby nie powinno być trudne.

Pozdrawiam
empathon
Tak swoją drogą: http://webhosting.pl/Adres.IP.bedzie.nalez....osobowych.w.UE
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.