Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sesje - pomocy !
Forum PHP.pl > Forum > Przedszkole
Tsiru
Cześć !
Chciałem napisać licznik, który by zliczał, ile osób w danej chwili ogląda moją strone, ale sesje to dla mnie czasrma magia :/.
Czytałem manuala, ale w ząb niewiem jak to napisać.
Może mi ktoś pomóc z tym licznikiem ?
strife
http://forum.php.pl/index.php?showtopic=28296
Misiek
Do tego nie koniecznie potrzebne są Ci sesje.

Ładujesz IP wszystkich odwiedzających i time() powiększone o kilka minut do pliku i potem sprawdzasz za każdym razem pętlą czy IP się zgadza jeśli go jeszcze nie ma, to dodajesz, a jeśli jest, to sprawdzasz time() z tym wpisanym do pliku.

Ni epodaję gotowej recepty, takie skrypty są w sieci

Pozdrawiam
Tsiru
Dzięki, ale my sql nieczaje :/
Da się to zrobić w oparciu o pliki textowe ?
darkspirit
S'il vous plait smile.gif

  1. <?php 
  2. /** 
  3. *  Plik zawiera kod licznika osób online 
  4. *  @author Łukasz Janicki <darkspirit@strefaphp.net> 
  5. *  @copyright copyLeft 
  6. *  @link http://strefaphp.net 
  7. *  @version 1.0 
  8. */ 
  9.  
  10.   /** 
  11.   *  Stała zawiera nazwę pliku, w którym znajdują się dane o gościach online. 
  12.   */ 
  13.   define('FILE_NAME','on.line.php'); 
  14.  
  15.   /** 
  16.   *  Zwraca liczbę sekund, które odpowiadają w czasie liczbie minut podanej w 
  17.   *  argumencie w funkcji. 
  18.   * 
  19.   *  @param integer $minutes 
  20.   *  @return integer 
  21.   */ 
  22.   function gsf_minutes($minutes) 
  23.   { 
  24.      return 60 * $minutes; 
  25.   } #end function gsf_minutes() 
  26.  
  27.   /** 
  28.   *  Zwraca liczbę sekund, które odpowiadają w czasie liczbie godzin podanej w 
  29.   *  argumencie w funkcji. 
  30.   * 
  31.   *  @param integer $hours 
  32.   *  @return integer 
  33.   */ 
  34.   function gsf_hours($hours) 
  35.   { 
  36.      return 3600 * $hours; 
  37.   } #end function gsf_hours() 
  38.  
  39.   /** 
  40.   *  Zwraca liczbę sekund, które odpowiadają w czasie liczbie dni podanej w 
  41.   *  argumencie w funkcji. 
  42.   * 
  43.   *  @param integer $days 
  44.   *  @return integer 
  45.   */ 
  46.   function gsf_days($days) 
  47.   { 
  48.      return 86400 * $days; 
  49.   } #end function gsf_days() 
  50.  
  51.   /** 
  52.   *  Zwraca liczbę osób online. Liczba ta musi być większa od 0 gdyż ktoś musi 
  53.   *  przeglądać stronę skoro skrypt jest wykonywany;] 
  54.   * 
  55.   *  @param void 
  56.   *  @return integer 
  57.   */ 
  58.   function visitors() 
  59.   { 
  60.      global $online2; 
  61.  
  62.      $online = count($online2); 
  63.      if($online == 0) 
  64.         return 1; 
  65.      else 
  66.         return $online; 
  67.   } #end function visitors() 
  68.  
  69.  
  70.   if(file_exists(FILE_NAME)) #sprawdzamy czy plik istnieje 
  71.   { 
  72. /** 
  73.   zapisujemy wszystkie linie pliku jako osobne elementy w tablicy $online 
  74. */ 
  75.      $online = file(FILE_NAME); 
  76.      foreach($online as $on) # każdy element tablicy... 
  77.      { 
  78.         $part = explode(&#092;"t\",$on); # dzielimy na nową tablicę 
  79. /** 
  80.   tworzymy nową tablicę typu: [IP_GOSCIA] = DATA_PRZELADOWANIA 
  81. */ 
  82.         $online2[rtrim($part[0])] = $part[1]; 
  83.      } 
  84. /** 
  85.   usuwamy z tablicy element o IP takim jak IP odwiedzającego 
  86. */ 
  87.      unset($online2[$_SERVER['REMOTE_ADDR']]); 
  88. /** 
  89.   tworzymy nowy element w tablicy o IP takim jak IP odwiedzajacego 
  90. */ 
  91.      $online2[$_SERVER['REMOTE_ADDR']] = time(); 
  92.      $time = time(); #zapisujemy aktualny czas, by nie wywoływać funkcji time(), w pętli 
  93.      foreach(array_keys($online2) as $on) # dla każdego klucza z tablicy 
  94.      { 
  95. /** 
  96.   sprawdzamy czy element o danym kluczu, ma czas przeładowania strony mniejszy 
  97.   niż (aktualny czas - przedział czasu ludzi online) 
  98. * jeśli tak usuwamy element, jeśli chcemy zamiast przedziału w minutach, mieć 
  99.   przedział w godzinach lub dniach zmieniamy nazwę funckji na gfs_hours lub 
  100.   gfs_days. 
  101. * jeśli nie, dopisujemy do zmniennej wpis typu: [ADRESS_IP] t 
  102.   [DATA_PRZELADOWANIA] n - gdzie n to znak nowej lini, a t inny separator 
  103. */ 
  104.         if($online2[$on] < ($time - gsf_minutes('5'))) 
  105.            unset($online2[$on]); 
  106.         else 
  107.            $file_ .= &#092;"$on t $online2[$on] n\"; 
  108.      } 
  109.   } 
  110. /** 
  111.   jeśli plik z goścmi onlinie nie istnieje, tworzymy zmienną z wpis typu: 
  112.   [ADRESS_IP] t [DATA_PRZELADOWANIA] n - gdzie n to znak nowej lini, a t 
  113.   biały znak 
  114. */ 
  115.   else 
  116.      $file_ = $_SERVER['REMOTE_ADDR'].&#092;"t\".time().\"n\"; 
  117.  
  118.   echo 'Osób online: '.visitors(); # wyświetlamy liczbę osób online 
  119.  
  120. /** 
  121.   tworzymy nowy plik do zapisu,jeśli plik istnieje jego poprzednia zawartość 
  122.   zostaje skasowana 
  123. */ 
  124.   $file = fopen(FILE_NAME,'w'); 
  125.   flock($file, LOCK_EX);        # blokujemy plik do odczytu 
  126.   fwrite($file,$file_);         # zapisujemy dane o gościach online(ze zmniennej $file_) do pliku 
  127.   flock($file, LOCK_UN);        # odblokowywujemy plik 
  128.   fclose($file);                # zamykamy plik 
  129. ?>


btw. topic :/

paps
Tsiru
dzięki !
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.