|
onlineОбсуждение темы online в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; SpyLib , приведенный тобой скрипт хранит в файле IP-адреса и время посещения каждого юзверя, когда-либо зашедшего на сайт. Причем этот файл постоянно растет ... |
|
Опции темы |
12.01.2006, 13:02 | #21 |
|
SpyLib, приведенный тобой скрипт хранит в файле IP-адреса и время посещения каждого юзверя, когда-либо зашедшего на сайт.
Причем этот файл постоянно растет с каждым посщением, что уже глупо. По этому файлу потом считается количество уникальных IP-шников, заходивших недавно. IP-адрес оттуда никак низя удалять. Иначе ты не получишь это самое количество. Но файл надо как-то чистить. Иначе такой счетчик при нормальной посещаемости скоро станет срашным гемороем для сервера. |
|
14.01.2006, 10:52 | #22 |
|
В этой статье Вы узнаете, как написать счётчик, для отображения количества on-line пользователей находящихся на Вашем сайте.
Нам понадобится: 1. права на запись и чтение для каталога online, в котором будет код нашего счётчика. 2. библиотека gd or gd2 проинсталлированная на Вашем сервере. Ниже, идёт описание файлов, которые должны находиться в одном каталоге, в нашем случае - online. Каталогу нужно задать права на чтение и запись для всех пользователей. Файл online.php <? session_start(); // запускаем сессию $pathToFile="online.txt"; /* данный файл будет создан в каталоге с нашим скриптом*/ $time=20; /* время в секундах, по истечению которого, пользователь, становится off-line */ header("Refresh: ".($time-10).""); /*задаём время, через которое счётчик будет обновляться, 10 секунд мы даём пользователю со слабым коннектом*/ if(!file_exists($pathToFile)){ /*проверяем существует ли файл определённый нами выше*/ $fp=fopen($pathToFile,"r"); fclose($fp); chmod($pathToFile,0745); /*если файла нет, мы его создаём и присваиваем нужные права на запись и чтение*/ } /* Далее следует объявления функций, описывать конкретные функцию я не стану, но опишу принцип того, что они делают*/ function startOnline($pathToFile){ if(!SearchVal($pathToFile,session_id(),"0")){ WriteLine($pathToFile,session_id()."\t".date("U"). "\n"); }else{ WriteToLine($pathToFile,session_id(),date("U")); } } function SearchVal($pathToFile,$val,$column,$retCol=""){ $file=file($pathToFile); for($i=0;$i<count($file);$i++){ $expl=explode("\t",$file[$i]); if(trim($expl[$column])==$val){ if($retCol!="")return $expl[$retCol]; else return true; } } } function WriteLine($fpath,$line){ $fp=fopen($fpath,"a"); flock($fp,2); fwrite($fp,$line); flock($fp,3); fclose($fp); } function WriteToLine($pathToFile,$where,$val){ $file=file($pathToFile); for($i=0;$i<count($file);$i++){ $expl=explode("\t",$file[$i]); if(trim($expl[0])==$where)$file[$i]=$where."\t".$val."\n"; } $fp=fopen($pathToFile,"w"); flock($fp,2); for($i=0;$i<count($file);$i++){ fwrite($fp,$file[$i]); } flock($fp,3); fclose($fp); } function dropLastUser($pathToFile,$time){ $file=file($pathToFile); for($i=0;$i<count($file);$i++){ $expl=explode("\t",$file[$i]); if(date("U")-$expl[1]>$time){ array_splice($file,$i,1); } } $fp=fopen($pathToFile,"w"); flock($fp,2); for($i=0;$i<count($file);$i++){ fwrite($fp,$file[$i]); } flock($fp,3); fclose($fp); } function onLine($pathToFile){ $file=file($pathToFile); echo "<img src=\"stri.php?str=".count($file)."\">"; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0"> <? dropLastUser($pathToFile,$time); startOnline($pathToFile); onLine($pathToFile); ?> </body> </html> Файл stri.php, он будет графическое выводить количество пользователей <? error_reporting(0); session_start(); if(!isset($_GET['str']))exit; $string = $_GET['str']; $string2 = "on-line"; header("Content-type: image/png"); $width=80; $height=40; $im = imagecreate($width,$height); $white = imagecolorallocate($im, 255, 255, 255); $orange= imagecolorallocate($im, 34, 196, 162); $black = imagecolorallocate($im, 100, 100, 100); $bgcolor= imagecolorallocate($im, 96, 158, 200); $green= imagecolorallocate($im, 73, 190, 113); $strcolor= imagecolorallocate($im, 145, 111, 102); $red = imagecolorallocate($im,255,60,75); ImageFill($im,0,0,$bgcolor); ImageFilledRectangle($im,0,0,100,11,$red); ImageFilledRectangle($im,0,31,100,39,$green); $px = (imagesx($im)-6 * strlen($string2)) / 2; $py = (imagesy($im))/2-22; imagestring($im, 2, $px, $py, $string2, $white); $px = (imagesx($im)-9 * strlen($string)) / 2; $py = (imagesy($im))/2-5; imagestring($im, 5, $px, $py, $string, $white); ImageLine($im,0,11,100,11,$white); ImageLine($im,0,31,100,31,$white); imagepng($im);imagedestroy($im); ?> Теперь, я расскажу по какому принципу всё это работает. Наш счётчик, каждые 10 секунд читает текстовый файл в поисках идентификатора пользователя зашедшего на сайт, если он его не находит, видимо, пользователь только что зашёл на сайт. В таком случаем, счётчик запишет в файл идентификатор пользователя и время его последнего отклика. Если же идентификатор пользователя найден, что означает - пользователь зашёл на сайт чуть раньше. В таком случаем, мы обновим время последнего отклика, тоесть запишем туда текущее время. Перед всеми этими манипуляциями, скрипт, определяет у кого разница между текущим временем и временем последнего отклика, больше времени указанного нами в файле online.php, а именно $time=20;. В нашем примере, счётчик обновляется каждые 10 секунд, если от пользователя в течении 20 секунд нет отклика – мы удаляем запись из файла хранящего идентификаторы позльзователей и время их последнего отклика. И так… Создаём каталог для счётчика, например online. Даём ему права для всех на запись и чтение. Создаём файл online.php и stri.php, запишем туда всё, что я написал выше под именем каждого из файлов. Теперь, в каждом документе, где нам нужно вставить счётчик, в нужном месте пишем следующее <iframe src="online/online.php" width="80" height="40" scrolling="no" frameborder="0" ></iframe> Всё, счётчик готов! Вопросы и пожелания присылайте на [email protected] |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
код для online рисовалки | m4igor | ASP, Perl, PHP и MySQL | 3 | 10.02.2010 07:24 |
eve online | ivan341 | Кальянная | 7 | 12.08.2006 16:43 |
online game WarWar.ru | koyak | Зал дебютантов | 3 | 22.12.2005 12:09 |
excel в online прайс | mr_jok | HTML, CSS, JavaScript | 3 | 23.07.2005 04:04 |
BOMBER ONLINE - Команда web-silver | egorix | Кальянная | 6 | 30.04.2005 02:06 |
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|