Licznik ludzi na czacie


(Krykadam) #1

Witam ! Chciałbym się dowiedzieć jak zrobić takie coś że przy linku do czatu np. w nawiasie jest pokazana ilość ludzi siedzących na czasie. Przykład ? http://www.komforum.net


(adpawl) #2

Możesz wykorzystać poniższy skrypt do zliczania ilości osób online...

(wymaga obsługi mysql)

http://files.hostpark.pl/php/9/9_1.zip


(Krykadam) #3

Tylko jak mam go teraz "zainstalować" ?? Lazikar może wie?


(adpawl) #4

Hmm... bez urazy ...ale głupie pytanie :smiley:

No ja sądze, że lazikar jest inteligentnym i domyślnym człowikiem

...takim, który z pewnością nie przegapił by w powyższym pliku fragmentu:

:wink:

...i w czym problem?


(system) #5

Tu masz kilka liczników, niektóre są do on-line : http://pliki.webhelp.pl/index.php?actio ... =php&id=10

Używam coś takiego :

<?php

/**

* Plik zawiera kod licznika osób online

* @author Łukasz Janicki 

* @copyright copyLeft

* @link http://strefaphp.net

* @version 1.0

*/


  /**

  * Stała zawiera nazwę pliku, w którym znajdują się dane o gościach online.

  */

  define('FILE_NAME','on.line.php');


  /**

  * Zwraca liczbę sekund, które odpowiadają w czasie liczbie minut podanej w

  * argumencie w funkcji.

  *

  * @param integer $minutes

  * @return integer

  */

  function gsf_minutes($minutes)

  {

     return 60 * $minutes;

  } #end function gsf_minutes()


  /**

  * Zwraca liczbę sekund, które odpowiadają w czasie liczbie godzin podanej w

  * argumencie w funkcji.

  *

  * @param integer $hours

  * @return integer

  */

  function gsf_hours($hours)

  {

     return 3600 * $hours;

  } #end function gsf_hours()


  /**

  * Zwraca liczbę sekund, które odpowiadają w czasie liczbie dni podanej w

  * argumencie w funkcji.

  *

  * @param integer $days

  * @return integer

  */

  function gsf_days($days)

  {

     return 86400 * $days;

  } #end function gsf_days()


  /**

  * Zwraca liczbę osób online. Liczba ta musi być większa od 0 gdyż ktoś musi

  * przeglądać stronę skoro skrypt jest wykonywany ;]

  *

  * @param void

  * @return integer

  */

  function visitors()

  {

     global $online2;


     $online = count($online2);

     if($online == 0)

        return 1;

     else

        return $online;

  } #end function visitors()



  if(file_exists(FILE_NAME)) #sprawdzamy czy plik istnieje

  {

/**

  zapisujemy wszystkie linie pliku jako osobne elementy w tablicy $online

*/

     $online = file(FILE_NAME);

     foreach($online as $on) # każdy element tablicy...

     {

        $part = explode("\t",$on); # dzielimy na nową tablicę

/**

  tworzymy nową tablicę typu: [IP_GOSCIA] = DATA_PRZELADOWANIA

*/

        $online2[rtrim($part[0])] = $part[1];

     }

/**

  usuwamy z tablicy element o IP takim jak IP odwiedzającego

*/

     unset($online2[$_SERVER['REMOTE_ADDR']]);

/**

  tworzymy nowy element w tablicy o IP takim jak IP odwiedzajacego

*/

     $online2[$_SERVER['REMOTE_ADDR']] = time();

     $time = time(); #zapisujemy aktualny czas, by nie wywoływać funkcji time(), w pętli

     foreach(array_keys($online2) as $on) # dla każdego klucza z tablicy

     {

/**

  sprawdzamy czy element o danym kluczu, ma czas przeładowania strony mniejszy

  niż (aktualny czas - przedział czasu ludzi online)

* jeśli tak usuwamy element, jeśli chcemy zamiast przedziału w minutach, mieć

  przedział w godzinach lub dniach zmieniamy nazwę funckji na gfs_hours lub

  gfs_days.

* jeśli nie, dopisujemy do zmniennej wpis typu: [ADRESS_IP] \t

  [DATA_PRZELADOWANIA] \n - gdzie \n to znak nowej lini, a \t inny separator

*/

        if($online2[$on] < ($time - gsf_minutes('5')))

           unset($online2[$on]);

        else

           $file_ .= "$on \t $online2[$on] \n";

     }

  }

/**

  jeśli plik z goścmi onlinie nie istnieje, tworzymy zmienną z wpis typu:

  [ADRESS_IP] \t [DATA_PRZELADOWANIA] \n - gdzie \n to znak nowej lini, a \t

  biały znak

*/

  else

     $file_ = $_SERVER['REMOTE_ADDR']."\t".time()."\n";


  echo 'Osób online: '.visitors(); # wyświetlamy liczbę osób online


/**

  tworzymy nowy plik do zapisu,jeśli plik istnieje jego poprzednia zawartość

  zostaje skasowana

*/

  $file = fopen(FILE_NAME,'w');

  flock($file, LOCK_EX); # blokujemy plik do odczytu

  fwrite($file,$file_); # zapisujemy dane o gościach online(ze zmniennej $file_) do pliku

  flock($file, LOCK_UN); # odblokowywujemy plik

  fclose($file); # zamykamy plik

?>

ps. plikowi on.line.php nadaj chmod 666