WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Практические примеры программирования cgi-скриптов на Perl: чат.


Прислал: OlegTr [ 09.04.2001 @ 01:24 ]
Раздел:: [ Статьи по Perl ]


Чат.

Написание чата ничем особенным не отличается. Та же запись в файлы, чтение из них информации и вывод ее на экран. Однако есть кое-какие тонкости. Сообщения в чат поступают в режиме реального времени, поэтому для поддержания этого режима необходимо периодически обновлять содержимое html-страницы. Это осуществляется с помощью мета-инструкции <meta http2-equiv="Refresh" content="10"> .В данном случае будем обновлять страницу с интервалом в 10 секунд, этого вполне достаточно. Итак, приступим непосредственно к чату. Для удобства, разобьем его как и форум на части и рассмотрим каждую в отдельности.

Вход в чат.

Сгенерируем форму для входа в чат.

<html><style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#000080;}
</style>
<body>
<h3 align=center><font color="ff0000">Вход в чат.</font></h3>
<form action="chat.cgi" method="GET">
<table align=center>
<tr><td>Введите ваш ник:<td><input type="text" name="nick" size=20>
<tr><td>Выберите цвет сообщений:<td><select name="color">
<option>black</option>
<option>red</option>
<option>blue</option>
<option>green</option>
<option>darkred</option>
<option>yellow</option>
</select>
<tr><td colspan=2><input type="hidden" name="enter" value="1">
<tr><td colspan=2><input type="hidden" name="action" value="login">
<tr><td colspan=2><input type="submit" value="Enter">
</table></form></html>

Она будет иметь такой вид:

Вход в чат.

Введите ваш ник:
Выберите цвет сообщений:

Посетитель выбирает себе ник и цвет, под которым будут выводиться его сообщения. Далее,скрипт получает эти данные и обрабатывает их.

#!/usr/local/bin/perl
$request=$ENV{'REQUEST_METHOD'};
$content=$ENV{'CONTENT_LENGTH'};

$file="chat.txt";                              # Файл для записи сообщений
$syslog="log.txt";                             # Cистемный журнал
$online="online.txt";                          # Файл для записи онлайновых посетителей.
$dir="f:/usr/local/apache/cgi-bin";
$path="f:/usr/local/apache/cgi-bin/images/";   # Путь к папке с картинками (смайликами)

# Назначаем переменные для смайликов.
@images=("smile.gif","frown.gif","redface.gif","biggrin.gif","wink.gif", "tongue.gif","cool.gif","rolleyes.gif","mad.gif","eek.gif","confused.gif");

$img0=$images[0];
$src0="$path$img0";
$img1=$images[1];
$src1="$path$img1";
$img2=$images[2];
$src2="$path$img2";
$img3=$images[3];
$src3="$path$img3";
$img4=$images[4];
$src4="$path$img4";
$img5=$images[5];
$src5="$path$img5";
$img6=$images[6];
$src6="$path$img6";
$img7=$images[7];
$src7="$path$img7";
$img8=$images[8];
$src8="$path$img8";
$img9=$images[9];
$src9="$path$img9";
$img10=$images[10];
$src10="$path$img10";

if ($request eq 'GET') {
$query=$ENV{'QUERY_STRING'};
} else {
sysread(STDIN,$query,$content);


}

# Функция для декодирования полей форм.
@pairs = split(/&/, $query);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s///g;
$name =~ s/<([^>]|n)*>//g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s///g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/n//g;
$value =~ s/cM/ /g;
$value =~ s/|/ /g;
$value =~ tr/ / /s;
$value =~ s/<([^>]|n)*>//g;
$value =~ s/"/"/g;
$value=~s/:)/<img src='$src0'>/g;
$value=~s/:(/<img src='$src1'>/g;
$value=~s/:o/<img src='$src2'>/g;
$value=~s/:D/<img src='$src3'>/g;
$value=~s/;)/<img src='$src4'>/g;
$value=~s/:p/<img src='$src5'>/g;
$value=~s/:cool:/<img src='$src6'>/g;
$value=~s/:rolleyes:/<img src='$src7'>/g;
$value=~s/:mad:/<img src='$src8'>/g;
$value=~s/:eek:/<img src='$src9'>/g;
$value=~s/:confused:/<img src='$src10'>/g;
$input{$name} = $value;
}

############################Вход в чат###########################################

($action eq "login") && do {

# Получаем переменные

$enter=$input {'enter'};
$color=$input {'color'};
$nick=$input {'nick'};
$time=scalar localtime;

if ($enter eq "1") {

# Проверяем,ввел ли посетитель ник и если да то записываем в системный
# журнал имя и время входа.

if ($nick ne "") {
open (LOG,">>$syslog");
$string="Системное сообщение:$nick вошел в чат $time";
print LOG "$stringn";
close (LOG);

# Добавляем имя посетителя также в файл для показа онлайна.
open (NET,">>$online");
print NET "$nickn";
close (NET);

# Установим количество записей в журнале.Я выбрал их равным 10.

open (LOG,"$syslog");
@strings=<LOG>;
$count=@strings;
close (LOG);

# Если их количество больше 10,удаляем самую первую запись и перезаписываем журнал.

if ($count>10) {
shift (@strings);
}

open (LOG,">$syslog");
print LOG @strings;
close (LOG);

# Теперь посетитель находится в чате и может добавлять сообщения.
# Генерируем форму.

print "Content-type:text/htmlnn";
print <<HTML;
<html><style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#000080;}
</style>
<body>
<center><h3>Здравствуйте,<font color="$color">$nick!</font></h3>
Вы успешно вошли в чат.
<br>Вы можете добавлять ваши сообщения.Ваш цвет-<font color="$color">$color</font>.</center>
<form action="chat.cgi" method="GET">
<input type="hidden" name="action" value="add">
<input type="hidden" name="nick" value="$nick">
<input type="hidden" name="color" value="$color">
<input type="hidden" name="send" value="1">
<table align=center>
<tr><td><textarea name="message" wrap="virtual" rows=5 cols=40></textarea>
<td><input type="submit" value="Отправить"></form><p>
<form action="chat.cgi" method="GET">
<input type="hidden" name="action" value="add">
<input type="hidden" name="nick" value="$nick">
<input type="submit" value="<<Выход>>">
</form>
</table>
HTML
}

# Если посетитель не ввел ник,выдается ошибка.
else {
print "Content-type:text/htmlnn";
print <<HTML;
<html><style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#000080;}
</style>
<body>
<h3 align=center>Вы не ввели ник!</h3>
Пожалуйста,вернитесь и введите ник.
<p><center><a href="chat.cgi?action=login">Назад</a></center>
HTML
}
}

Форма будет иметь следующий вид:

Здравствуйте, гость!

Вы успешно вошли в чат.
Вы можете добавлять ваши сообщения.Ваш цвет-red.

Как видите,она имеет 2 кнопки, предусмотрена кнопка выхода из чата, а также кнопка для отправки сообщения в чат. Это будет рассмотрено далее.

Добавление сообщения в чат.

После того, как посетитель ввел сообщение и нажал кнопку "Отправить", сообщение записывается в файл. Ник посетителя и цвет сообщений передаются в скрытых полях формы.

##################################Добавление
сообщения########################################

($action eq "add") && do {
$time=time;                   # Получаем текущее время в секундах.
$time1=scalar localtime;      # Время в нормальном формате.
$nick=$input {'nick'};
$color=$input {'color'};
$send=$input {'send'};
$exit=$input {'exit'};
$message=$input {'message'};

# Если посетитель нажал кнопку "Отправить".
if ($send eq "1") {

# Проверяем,чтобы поле сообщения не было пустым.
if ($message ne "") {

# Если все ОК открываем файл на добавление и записываем данные.
open (FILE,">>$file");
$string=join ('&',$nick,$time,$color,$message);
print FILE "$stringn";
close (FILE);

# Читаем файл в массив и подсчитываем количество сообщений.
open (FILE,"$file");
@lines=<FILE>;
$count=@lines;
close (FILE);

# Устанавливаем количество сохраняемых сообщений равным 20.
# Если этот лимит превышен,первое сообщение удаляется и т.д.
if ($count>20) {
shift (@lines);
}

# Перезаписываем измененный файл.
open (FILE,">$file");
print FILE @lines;
close (FILE);

# Сообщение записано и через 10 секунд появится на экране.
# Снова выводим форму для отправки сообщения.

print "Content-type:text/htmlnn";
print <<HTML;
<html><style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#000080;}
</style>
<body>
<center><h3>Новое сообщение.lt;/h3>
Вы уже в чате.Добавьте новое сообщение.
<вr>Ващ ник-<font color="$color">$nick</font>,цвет-<font color="$color">$color</font>.</center>
<form action="chat.cgi" method="GET">
<input type="hidden" name="action" value="add">
<input type="hidden" name="nick" value="$nick">
<input type="hidden" name="color" value="$color">
<input type="hidden" name="send" value="1">
<table align=center>
<tr><td><textarea name="message" wrap="virtual" rows=5 cols=40></textarea>
<td><input type="submit" value="Отправить"></form><p>
<form action="chat.cgi" method="GET">
<input type="hidden" name="action" value="add">
<input type="hidden" name="nick" value="$nick">
<input type="submit" value="<<Выход>>">
</form>
</table>
HTML
}

# Если посетитель не ввел сообщение.

else {
print "Content-type:text/htmlnn";
print <<HTML;
<html><style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#000080;}
</style>
<body>
<center><h3>Ошибка!</h3>
Поле сообщения не должно быть пустым.
<br>Ваш ник-<font color="$color">$nick</font>,цвет-<font color="$color">$color</font>.
<form action="chat.cgi" method="GET">
<input type="hidden" name="action" value="add">
<input type="hidden" name="nick" value="$nick">
<input type="hidden" name="color" value="$color">
<input type="hidden" name="send" value="1">
<table align=center>
<tr><td><textarea name="message" wrap="virtual" rows=5 cols=40></textarea>
<td><input type="submit" value="Отправить"></form><p>
<form action="chat.cgi" method="GET">
<input type="hidden" name="action" value="add">
<input type="hidden" name="nick" value="$nick">
<input type="submit" value="<<Выход>>">
</form>
</table>
HTML
}

Выход из чата.

Если посетитель нажал кнопку "Выход".

##################################Выход из чата###########################################

} else {

# Записываем сообщение в системный журнал.
open (LOG,">>$syslog");
$string="Системное сообщение:$nick вышел из чата $time1";
print LOG "$stringn";
close (LOG);

# Снова удаляем лишние сообщения.
open (LOG,"$syslog");
@strings=<LOG>;
$count=@strings;
close (LOG);
if ($count>10) {
shift (@strings);
}

# Перезаписываем файл.
open (LOG,">$syslog");
print LOG @strings;
close (LOG);

# Говорим посетителю до свидания :)
print "Content-type:text/htmlnn";
print <<HTML;
<html><style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#000080;}
</style>
<body>
<h3 align=center>Спасибо за посещение нашего чата,<font color="0000ff">$nick</font>!</h3>
Заходите еще!
<p><center><a href="chat.cgi?action=login">Войти в чат</a></center>
HTML

# Удаляем посетителя из онлайна.Для этого обновляем файл online.txt
open (NET,"$online");
@users=<NET>;          # Читаем содержимое
foreach $user (@users) {
if ($user !~ /$nick/) {   # Сравниваем ник посетителя,выщедшего из чата с каждым
# ником в файле и если они не равны помещаем их в массив.
push (@online,$user);
}
}
close (NET);

# Перезаписываем файл уже без ушедшего посетителя.
open (NET,">$online");
print NET @online;
close (NET);
}

#Таким образом поддерживается самая свежая информация о посетителях, или я не прав? :)))

Показ посетителей,в данный момент находящихся в чате.

############################### ##Кто в
онлайне###############################################

($action eq "online") && do {

# Эта страница также будет обновляться каждые 10 секунд.
print "Content-type:text/htmlnn";
print <<HTML;
<html><meta http2-equiv="Refresh" content="10">
<style>
BODY {background-color:lightsteelblue;font-family:arial;font-size:10pt;}
</style>
<body>

# Выводим на экран табличку со смайликами.
<p><h5 align=center><font color="000080">Смайлики</font></h5>
<p><table align=center width=100>
<tr><td><img src="$path$img0"><td><font color="000000">:)</font>
<tr><td><img src="$path$img1"><td><font color="000000">:(</font>
<tr><td><img src="$path$img2"><td><font color="000000">:o</font>
<tr><td><img src="$path$img3"><td><font color="000000">:D</font>
<tr><td><img src="$path$img4"><td><font color="000000">;)</font>
<tr><td><img src="$path$img5"><td><font color="000000">:p</font>
<tr><td><img src="$path$img6"><td><font color="000000">:cool:</font>
<tr><td><img src="$path$img7"><td><font color="000000">:rolleyes:</font>
<tr><td><img src="$path$img8"><td><font color="000000">:mad:</font>
<tr><td><img src="$path$img9"><td><font color="000000">:eek:</font>
<tr><td><img src="$path$img10"><td><font color="000000">:confused:</font>
</table>

# Отображаем список посетителей.
<h5 align=center><font color="000080">Кто в онлайне.</font></h5>
HTML

# Здесь я предусмотрел очистку файла online.txt через 3 минуты после бездействия чата.
# Ни к чему хранить давние сообщения. Системный журнал и файл с сообщениями также очищаются
# после 3 минут бездействия, как вы увидите дальше.

# Сравниваем время модификации файла с текущим временем.
$cur_time=time;
$stat3=(stat ("$online"))[9];
$diff3=$cur_time-$stat3;        # Вычисляем разность

# Если разность более 180 секунд, перезаписываем файл пустым значением.
if ($diff3>180) {
open (NET,">$online");
print NET "";
close (NET);
}

# Дальше выводим собственно список.
open (NET,"$online");
@lines=<NET>;
$count=@lines;
if ($count!=0) {
print "<table bgcolor="e6e8fa" align=center width=80 cellspacing=0 border=1 bordercolor="000000"><tr><td>n";
foreach $line (@lines) {
print "<font face="serif" size=2 color="0000ff">",$line,"</font><br>";
}
}
close (NET);
print <<HTML;
</table>
<p> 

<center><a href="chat.cgi?action=login" target="second">Войти в чат</a></center>
HTML

Вывод системного журнала.

В системный журнал пишутся сообщения о входе в чат и выходе из него. Он постоянно динамически обновляется. Для вывода его на экран читаем файл syslog.txt

#########################Вывод системного
журнала##############################################
($action eq "log") && do {

# Здесь,в принципе все просто. Открываем файл, читаем и выводим на экран.

print "Content-type:text/htmlnn";
print <<HTML;
<html><meta http2-equiv="Refresh" content="10">
<body bgcolor="0000ff" text="ffffff">
HTML

# Снова проверяем время модификации файла, и если оно больше 180 секунд очищаем его.
$cur_time=time;
$stat2=(stat ("$syslog"))[9];
$diff2=$cur_time-$stat2;

if ($diff2>180) {
open (LOG,">$syslog");
print LOG "";
close (LOG);
}

# Выводим сообщения на экран,начиная с последнего.

open (LOG,"$syslog");
@lines=<LOG>;
@strings=reverse @lines;
foreach $string (@strings) {
print $string,"<br>";
}
close (LOG);
};

Вывод сообщений.

Здесь тоже ничего особенного.Просто выводим сообщения на экран,каждые 10 секунд обновляя его.

################################Чтение
сообщений##############################################

($action eq "read") && do {
print "Content-type:text/htmlnn";
print <<HTML;
<html><meta http2-equiv="Refresh" content="10">
<style>
BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;}
</style>
<body>
HTML

# Файл с сообщениями также очищается после 180 секунд бездействия.
$cur_time=time;
$stat1=(stat ("$file"))[9];
$diff1=$cur_time-$stat1;

if ($diff1>180) {
open (FILE,">$file");
print FILE "";
close (FILE);
}

# Читаем сообщения и выводим на экран, начиная с последнего.
open (FILE,"$file");
@lines=<FILE>;
@items=reverse (@lines);
foreach $item (@items) {
@string=split (/&/,$item);
$time=localtime ($string[1]);
print <<HTML;
<font color="$string[2]">$string[0]</font> $time <br>
<font color="$string[2]">$string[3]</font>
<center><hr width=80% noshade size=1></center>
HTML
}
close (FILE);

Главная страница.

Вот мы и добрались до главной страницы, на которой, собственно, и происходит все это. Она представляет собой набор фреймов, в каждом из которых производятся совершенно независимые действия.

####################################Главная
страница##########################################

if ($query eq "") {
print "Content-type:text/htmlnn";
print <<HTML;
<html><head></head>
<style>
A:link {text-decoration:none;font-family:arial;font-size:10pt;color:#000080; }
A:hover {text-decoration:none;font-family:arial;font-size:10pt;color:#ff0000; }
A:visited {text-decoration:none;font-family:arial;font-size:10pt;color:#000080; }
</style>
<frameset cols=20%,*>
<frame name="left" src="chat.cgi?action=online">
<frameset rows=50%,10%,*>
<frame name="first" src="chat.cgi?action=read">
<frame name="2" src="chat.cgi?action=log">
<frame name="second" src="chat.cgi?action=login">
</frameset>
</frameset>
HTML
}

Полный листинг чата можно посмотреть здесь, а пример работы здесь.

Я специально не выкладывал его на всеобщее обозрение,так как считаю это нецелесообразным. Чат должен работать на хорошо посещаемых сайтах,в основном развлекательных. Игроки, которые хотят избежать долгих поисков достойного букмекера, могут пройти регистрацию на сайте париматч Букмекерская контора популярна на рынке беттинга и зарекомендовала себя как надежный компаньон в вопросе интересных спортивных пари. Кому интересно-смотрите, пробуйте. Если понравилось-оставьте комментарий. Скачать можно здесь. Удачи.


 :::::  Миша пишет 25.04.2001 @ 10:52 
В принципе всё яно. Только у меня один вопрос возник. Можно ли сделать так, чтобы даже когда форма до сервера не дошла, можно было писать в новое сообщение. И в то время, которое я пишу новое сообщение идёт отправка старого. Буду признателен за ответ.
 :::::  ne0n пишет 28.04.2001 @ 04:51 
неплохо еще сюда прикрутить отправку приватных сообщений!
вопрос в другом! как это сделать?
 :::::  Zoid пишет 02.05.2001 @ 05:10 
Зайдите на pipka.ru и посмотрите на настоящий чат!
Пора прекращать плодить серую бездарность.
 :::::  Dikul пишет 03.05.2001 @ 09:02 
Спасибо за статью!!! ПОбольше бы таких для нас, чайников...
 :::::  vadzen пишет 22.05.2001 @ 07:46 
HI!

Автору: Для более правильного примера в чате и форуме желательно кодировку указывать. Для тех у кого в IE Encoding - Auto-select и не отмечено Cyrillic.
P.S. Впрочем это часто встречается на росийских сайтах.

Спасибо от чайника с двумя носиками.

 :::::  Antoxa пишет 08.06.2001 @ 02:32 
Интересно... а как там у этого чата со скоростью??
пользователях так при 50.....
 :::::  Victor пишет 10.06.2001 @ 03:40 
Спасибо что есть такой сайт, я только началь изучать Perl и Ваш сайт очень помагает мне в этом.
 :::::  Руслан Гор пишет 19.06.2001 @ 02:52 
Спасибо что есть такой сайт, я только началь изучать Perl и Ваш сайт очень помагает мне в этом ну вооще сервак неплох


 :::::  Макс пишет 19.07.2001 @ 06:25 
У меня есть вопрос. Почему при объявлении таких переменных $dir="f:/usr/local/apache/cgi-bin";
$path="f:/usr/local/apache/cgi-bin/images/"; # Путь к папке с картинками

используется путь начинающийся с f-диска. Ведь если чат будет работать на WEB сервере то путь должен будет начинаться с домена или просто символа /. Так это или не так? И еще один вопросик. Что будут означать двоеточия при такой записи
#$filehead = "../../data/files/"; # location *.txt file's
#$basehead = "../../data/base/"; # location base file's
Заранее спасибо за ответ и за эту статейку.



 :::::  test пишет 27.07.2001 @ 07:08 
классные скрипты
 :::::  temach пишет 07.11.2001 @ 19:45 
этот чат довольно прост для начинающего подойдет. Каждый кто хочет стать гуру вначале своего пути должен написать подобный чат, просто для тренировки.

Но я бы не рекомендовал приучать начинающих к такому стилю.

Первое что я увидел и ужаснулся это декодирование данных форм:

# Функция для декодирования полей форм.
@pairs = split(/&/, $query);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s///g;
$name =~ s/<([^>]|n)*>//g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s///g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/n//g;
$value =~ s/cM/ /g;
$value =~ s/|/ /g;
$value =~ tr/ / /s;
$value =~ s/<([^>]|n)*>//g;
$value =~ s/"/"/g;
$value=~s/:)/<img src='$src0'>/g;
$value=~s/:(/<img src='$src1'>/g;
$value=~s/:o/<img src='$src2'>/g;
$value=~s/:D/<img src='$src3'>/g;
$value=~s/;)/<img src='$src4'>/g;
$value=~s/:p/<img src='$src5'>/g;
$value=~s/:cool:/<img src='$src6'>/g;
$value=~s/:rolleyes:/<img src='$src7'>/g;
$value=~s/:mad:/<img src='$src8'>/g;
$value=~s/:eek:/<img src='$src9'>/g;
$value=~s/:confused:/<img src='$src10'>/g;
$input{$name} = $value;
}

Все это чтобы получить:

# Получаем переменные

$enter=$input {'enter'};
$color=$input {'color'};
$nick=$input {'nick'};
$time=scalar localtime;

Ведь гораздо удобнее использовать подпрограмму вида:

sub urldecode{
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-Ha-h]{2})/pack('C',hex($1))/ge;
return $val;
}

и выбивать данные в хэш простым обращением к ней:

foreach(split(/&/,$query)){
($f_n,$f_v)=split(/=/,$_);
$f_n=&urldecode($f_n);
$f_v=&urldecode($f_v);
$Form{$f_n}=$f_v;
}

в результате имеем тоже самое, но ведь гораздо удобнее.

Далее что удивляет что нет употребления функции flock();
которая блокирует файл, т.к. при популярности например чата, или других причинах возможно такое что разные процессы одновременно откроют один файл и что тогда будет неизвестно?

И еще нет никакой защиты от ввода вместе с сообщением тегов , я например люблю поболоваться в полохо сделанных чатах.

Рекомендую всем читать хорошие книги, но все равно за эту стать спасибо, было интересно этот чат разобрать.






 :::::  zzMonSteRzz пишет 03.12.2001 @ 21:19 
Cool-XAKEPzz Чат!
Спасибо за это
я только начал юзать перл причём под виндой -=)
 :::::  Notorious пишет 11.12.2001 @ 11:29 
Спасибо за статью!
Очень помогла на начальных порах!
Только интересно, что если пользователь не нажимает выход при выходе (что чаще всего) ?
Хорошо через 3 минуты бездействия чат удалит всех юзеров?
Заранее спасибо.

Был бы очень признателен за ответ или может кто знает где про сессии почитать.
 :::::  вадим пишет 30.11.2002 @ 12:26 
прикольно когда некто говорит: "я, типа, юзаю перл под виндой" какая разница под чем юзать перл? и какая разница что юзаешь?
важно просто иметь склад ума чтоб программировать, и тогда надо будет просто изучить синтаксис языка чтоб написать сносную программу... а потом почидишь пару дней и привед:ешь е:е "к нормальному бою"... никаких проблем.
а ещ:е странна что есть люди которые не пользуются доками...
там тоже много чего интересного нарыть можно например man perlfunc, man perldoc. или (как у меня, под виндой ;-) установил перл с хтмл-доками и пользуюсь http://localhost/perl/lib/
а сайт надо сказать просто отличный. таки есть статьи где находишь ответы на волнующие вопросы!
с уваженим,
вадим.
 :::::  MPAK пишет 15.05.2003 @ 17:34 
у меня вопрос такого характера, а как можно сделать, чтобы когда фрейм с сообщениями обновлялся не раздавалось звукового сопровождения( щелчка - в Windows, как в Linux'e не знаю)?
 :::::  Игорь пишет 07.09.2003 @ 12:50 
Хорошая статья! Она мне очень помогла при создание своего собственного чат с «приватом» «инфой» и прочими наворотами неплоха было добавить в статью функцию на JavaScript В которой при щелчке на смай
Сам добавлялся в поле вода, и помой му системный журнал лишний ну кому он нужен, не проще добавлять сообщения кто вошёл и кто вышел туда куда же и все сообщения та помойму было бы удобно!

 :::::  Мимо Проходил пишет 12.01.2004 @ 14:23 
Это ботский чат, то что автор подразумевает под выражением "в реальном времени"(10 сек), давно уже считается ..................
ИМХО качайте CGIIRC чат, ставьте и инжойте(не реклама а пример). Вот там скорость. Или на флеше че-нить ....
Современному пользователю нужна скорость...
 :::::  Настя пишет 14.10.2004 @ 16:32 
да............. наверна тупее меня в создании чата никого нет............. куда все это вписывать? как это делать........ мне даже стыдно....... можно все как можно понятнее и яснее........ объясняйте как для САМЫХ тупых людей вроде меня. ну очень сильно проста хочется чат создать
 :::::  Виталий пишет 20.06.2007 @ 18:03 
Где же листинг для скачивания?
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0566199