Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » ASP, Perl, PHP и MySQL

online

Обсуждение темы online в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; SpyLib , приведенный тобой скрипт хранит в файле IP-адреса и время посещения каждого юзверя, когда-либо зашедшего на сайт. Причем этот файл постоянно растет ...


Закрытая тема
 
Опции темы
Старый 12.01.2006, 13:02   #21
ILA

SpyLib, приведенный тобой скрипт хранит в файле IP-адреса и время посещения каждого юзверя, когда-либо зашедшего на сайт.
Причем этот файл постоянно растет с каждым посщением, что уже глупо.
По этому файлу потом считается количество уникальных IP-шников, заходивших недавно. IP-адрес оттуда никак низя удалять. Иначе ты не получишь это самое количество.
Но файл надо как-то чистить. Иначе такой счетчик при нормальной посещаемости скоро станет срашным гемороем для сервера.
 
Старый 12.01.2006, 13:02
Ссылки
Старый 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]
 
Старый 14.01.2006, 10:52
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
код для 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


Текущее время: 23:47. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум