S'il vous plait (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif)
<?php
/**
* Plik zawiera kod licznika osób online
* @author Łukasz Janicki <darkspirit@strefaphp.net>
* @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()
{
$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')))
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 ?>
btw. topic :/
paps
Ten post edytował darkspirit 29.03.2005, 17:11:09