Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: licznik online- ilość osób przy linku do strony
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
krys76
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
ShadowD
Hmmm, na pewno łatwo nie będzie z znalezieniem czegoś podobnego ale możesz się pokusić by napisać własny, napisze Ci jak miało by to wyglądać.

www.qw.pl - strona główna
www.licznki.qw.pl - strona z licznikiem

1. Najpierw musisz załatwić sobie wszystkie ip robotów itd.
2. Przy wejściu na www.qw.pl zapisujesz w bazie ip i aktualną godzinę jeśli jest to jakieś ip robota to nic nie robisz.
3. Na stronie www.licznki.qw.pl sprawdzasz czy istnieje jakiś rekord kturego data nie jest starsza nisz 5 min jeśli istnieje to zliczasz wszystkie takie rekordy i poprostu wyświetlasz tą liczbę na stronie.

Ten skrypt będzie pokazywał wszystkich obecnych z ostatnich 5 minut możesz się pokusić o zmianę nawet do 30 sec ale musisz mieć na uwadze, że nie każdy odświeża stronę co 30 sec zawsze może coś dłuższego czytać...

Mam nadzieję, że pomogłem dopowiem zarazem, że można coś podobnego napisać w ajax i pewnie będzie skuteczniejsze ale jest to sporo więcej zabawy.
Cysiaczek
Proszę, mi działa smile.gif

  1. <?php
  2. class onlineInfo
  3. {
  4.  
  5. static $dir='.';
  6. static $dataFile;
  7. private $maxLastSeenTime=240;
  8. private $userOnList=false;
  9.  
  10.  
  11. public function __construct()
  12. {
  13.  
  14. self::$dataFile=self::$dir.'/temp/usersOnline.tmp';
  15. if(!file_exists(self::$dataFile))
  16. {
  17. $this->save();
  18. }
  19.  
  20. $this->userIp=$_SERVER['REMOTE_ADDR'];
  21. $this->load();
  22. $this->checkVisitors();
  23. $this->save();
  24.  
  25. }
  26.  
  27. private function load()
  28. {
  29. $this->data=file(self::$dataFile);
  30. $count=count($this->data);
  31. if($count>0)
  32. {
  33.  
  34. for($i=0;$i<$count;++$i)
  35. {
  36. $this->data[$i]=trim($this->data[$i]);
  37. $this->userInfo[$i]=explode("|", $this->data[$i]);
  38. if($this->userInfo[$i][0]==$this->userIp)
  39. {
  40. $this->userOnList=true;
  41. $this->lastAvtivityTime=$this->userInfo[$i][0];
  42. }
  43. }
  44. }
  45.  
  46. if(!$this->userOnList)
  47. {
  48.  
  49. $this->userInfo[$count][0]=$this->userIp;
  50. $this->userInfo[$count][1]=time();
  51. }
  52.  
  53. }
  54.  
  55. function checkVisitors()
  56. {
  57. $count=count($this->userInfo);
  58. $currentTime=time();
  59. if($count>0)
  60. {
  61. for($i=0;$i<$count;++$i)
  62. {
  63. if($this->maxLastSeenTime<=($currentTime-$this->userInfo[$i][1]))
  64. {
  65. if($this->userInfo[$i][0]==$this->userIp)
  66. {
  67. $this->userInfo[$i][1]=time();
  68. continue;
  69. }
  70. unset($this->userInfo[$i]);
  71. }
  72. else
  73. {
  74. if($this->userInfo[$i][0]==$this->userIp)
  75. {
  76. $this->userInfo[$i][1]=time();
  77. }
  78. }
  79. }
  80. }
  81. }
  82.  
  83. public function getVisitors()
  84. {
  85. return count($this->userInfo);
  86. }
  87.  
  88. function save()
  89. {
  90. $string='';
  91. $count=count($this->userInfo);
  92.  
  93. $this->saveArray=array();
  94. $this->userInfo=array_merge($this->saveArray, $this->userInfo);
  95.  
  96. $lineEnd="\n";
  97. if($count>0)
  98. {
  99. for($i=0;$i<$count;++$i)
  100. {
  101. if($i==$count-1)
  102. {
  103. $lineEnd='';
  104. }
  105. if(is_array($this->userInfo[$i]))
  106. {
  107. $string.=implode("|", $this->userInfo[$i]).$lineEnd;
  108. }
  109. }
  110. }
  111. file_put_contents(self::$dataFile, $string);
  112. }
  113. }
  114. ?>
krys76
Cysiaczek czy ten skrypt trzeba wkleić przy linku czy do osobnego pliku i jakiś skrypt do tego pliku bo u mnie nie działa?
carbolymer
krys76, to jest biblioteka której musisz użyć a nie click&run skrypt ;]
  1. <?
  2. $oInfo = new onlineInfo;
  3. $oInfo->load();
  4. $oInfo->checkVisitors();
  5. echo $oInfo->getVisitors();
  6. $oInfo->save();
  7. ?>

I to bodajże powinno wyświetlić ci ten licznik ;]
Cysiaczek
Wystarczy krócej smile.gif
  1. <?php
  2. $oInfo = new onlineInfo();
  3. print 'ilośc osób online: '.$oInfo->getVisitors();
  4. ?>


Będzie działać, tylko nie zapomnij ustawić własnego pliku i ściezki oraz chmod ustawić smile.gif

Pozdrawiam
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-2024 Invision Power Services, Inc.