Skocz do zawartości


Zdjęcie

[PHP] licznik online - ilość osób przy linku do strony


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 krys76

krys76

    Nowy

  • 3 postów

Napisano 03 07 2008 - 20:07

Witam
Czy jest jakiś licznik, który by wyświetlał przy linku do danej strony ilość osób online (włącznie z zerem przy braku osób )

tak jak przy linkach do czatów np:
gry1- online 21
gry2- online 0
Ewentualnie jak zmodyfikować istniejące skrypty.

Mający wyłączanie IP (roboty wyszukiwarki) i odporny na odświeżanie.
Może być ewentualnie taki, który pokazuje czy ktoś jest online czy nie ma nikogo wogóle np:
gry1- użytkownicy online-tak
gry2- uż. online -brak
Dziękuje
krzysztof

  • 0

#2 kurio

kurio

    Pan

  • 282 postów

Napisano 07 07 2008 - 15:19

poszukaj kolego na http://hotscripts.com/
Ew. napisz swoj wlasny licznik w PHP z wykoystaniem petli for lub while.
Prosty skrypcik, napiszesz go w 30 minut.

  • 0

#3 Ziele

Ziele

    Biblioteka Zielińskiego

  • 1 812 postów

Napisano 07 07 2008 - 23:21

<?php
class onlineInfo
{

	static $dir='.';
	static $dataFile;
	private $maxLastSeenTime=240;
	private $userOnList=false;
	

	public function __construct()
	{

		self::$dataFile=self::$dir.'/temp/usersOnline.tmp';
		if(!file_exists(self::$dataFile))
		{
			$this->save();
		}

		$this->userIp=$_SERVER['REMOTE_ADDR'];
		$this->load();
		$this->checkVisitors();
		$this->save();
		
	}

	private function load()
	{
		$this->data=file(self::$dataFile);
		$count=count($this->data);
		if($count>0)
		{

			for($i=0;$i<$count;++$i)
			{
				$this->data[$i]=trim($this->data[$i]);
				$this->userInfo[$i]=explode("|", $this->data[$i]);
				if($this->userInfo[$i][0]==$this->userIp)
				{
					$this->userOnList=true;
					$this->lastAvtivityTime=$this->userInfo[$i][0];
				}
			}
		}

		if(!$this->userOnList)
		{

			$this->userInfo[$count][0]=$this->userIp;
			$this->userInfo[$count][1]=time();
		}

	}
	
	function checkVisitors()
	{
		$count=count($this->userInfo);
		$currentTime=time();
		if($count>0)
		{
			for($i=0;$i<$count;++$i)
			{
				if($this->maxLastSeenTime<=($currentTime-$this->userInfo[$i][1]))
				{
					if($this->userInfo[$i][0]==$this->userIp)
					{
						$this->userInfo[$i][1]=time();
						continue;
					}
					unset($this->userInfo[$i]);
				}
				else
				{
					if($this->userInfo[$i][0]==$this->userIp)
					{
						$this->userInfo[$i][1]=time();
					}
				}
			}
		}
	}
	
	public function getVisitors()
	{
		return count($this->userInfo);
	}
	
	function save()
	{
		$string='';
		$count=count($this->userInfo);

		$this->saveArray=array();
		$this->userInfo=array_merge($this->saveArray, $this->userInfo);

		$lineEnd="\n";
		if($count>0)
		{
			for($i=0;$i<$count;++$i)
			{
				if($i==$count-1)
				{
					$lineEnd='';
				}
				if(is_array($this->userInfo[$i]))
				{
					$string.=implode("|", $this->userInfo[$i]).$lineEnd;
				}
			}
		}
		file_put_contents(self::$dataFile, $string);
	}
}
?>
I to bodajże powinno wyświetlić ci ten licznik:
<?php
$oInfo = new onlineInfo();
print 'ilośc osób online: '.$oInfo->getVisitors();
?>
Ale głowy za to nie dam... ;)

  • 0

Zobacz więcej tematów z tagiem: liczniki



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych