荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: icefire (懒懒的心懒懒的我), 信区: Program
标  题: [转载] [转寄] Re: perl CGI聊天室
发信站: BBS 荔园晨风站 (Sun Nov 22 19:16:29 1998), 站内信件

【 以下文字转载自 icefire 的信箱 】
【 原文由 icefire.bbs@melon.gznet.edu.cn 所发表 】
发信人: wooce (残雪), 信区: CGI
标  题: Re: perl CGI聊天室
发信站: 华南网木棉站 (Sat Nov 21 19:30:03 1998), 转信

【 在 Stephan (???) 的大作中提到: 】
: 问一下:如果只用一个cgi程序实现,需要考虑到那些因素?
: 比如:登陆,发送消息等。
: 我想做成:不需口令,只要用户名同已有的不冲突就可以了,如何实现?
先贴一个脚本出来仅供参考,虽然不尽符合要求,但以后会完善的
#####################################################################
# ColorChat SIMPLE WEB CHAT SYSTEM version 0.01
#      Wooce(woiney@163.net)
#
# http://wooce.yeah.net
# Copyright 1998
#####################################################################


######## SETUP SECTION ##########
# 根据系统具体情况设置以下路径

$cgi_bin_url = "http://202.38.212.56/cgi-bin/clrchat.pl";
$loginurl ="http://202.38.212.56/chat/login.html";
$dialpage = "e:/inetpub/wwwroot/softandco/chat/dial.html";
$liste = "e:/inetpub/wwwroot/softandco/chat/liste.html";
$helpfile = "http://202.38.212.56/chat/help.html";



  &readmsg;  # 读入登陆窗口输入

# 初始化系统变量

 $refresh = $FORM{'refresh'};  # 信息窗刷新频率
 $dialflag = $FORM{'dialflag'};  # 交谈/登陆标志
 $clearflag=$FORM{'clearflag'};  # used in a prior version
 $dline = $FORM{'dline'};  # 信息窗内的实际行数
 $nbline = $FORM{'nbline'};  # 信息窗内最多行数
 $showid = $FORM{'showid'};  # IP地址开/关标志
 $pseudo = $FORM{'pseudo'};  # 用户昵称
 $message = $FORM{'message'};  # 信息内容
 $tcolor = $FORM{'tcolor'};  # 信息文本颜色
#用户名称空输入
if (length($pseudo) < 1) {
$pseudo = "无名!"
};
#没有选定颜色则缺省设置为白色
if (length($tcolor) < 1) {
$tcolor = "#ffffff"
};

 $ip = $ipflag;
 &hostid if($showid eq "YES");  # go get the ip address of user


 $refval = $nbline;
 $refrate = $refresh;


#新登陆则执行dial子过程,送出交谈信息则执行dialogue子过程
 &dial if ($dialflag eq "newdial");
    &dialogue if ($dialflag eq "talk");

############################################
#
#  dialogue子过程
#
############################################

sub dialogue {

  # Convertie < tags en &lt;

  $pseudo =~ s/</\&lt;/g;
  $message =~ s/</\&lt;/g;
  $email =~ s/</\&lt;/g;
  $clearflag =~ s/</\&lt;/g;
  $nbline =~ s/</\&lt;/g;



&dial;
 exit;
}

sub dial {
#若实际行数已超过最大行数则调用dinit子过程
&dinit if ($dline > $nbline);
# &dinit if ($dialflag eq "talk");

 &ouvrire_fichier("FILE1",">>",$dialpage);

  &ecrire_fichier("FILE1","[<FONT COLOR=#66FFFF size=1>" .$ip . "</FONT>][<FONT
COLOR=#FF00CC>" . "<B>" .$pseudo. "</B></FONT>" . "]" . " = " . "<FONT
COLOR=$tcolor>" . "" .$message . "<BR>" . "</FONT>" ."\n");

 close(FILE1);

#行数增1
$dline++;
 $pseudo =~ s/ /_/g;
 print "Content-type: text/html\n\n";
 print "<BODY TEXT=#FFCC0F BGCOLOR=#000000 LINK=#FFFF66 VLINK=#FFFF66
ALINK=#FF0000>\n";

print "<FORM ACTION=$cgi_bin_url METHOD=POST
ENCTYPE=application/x-www-form-urlencoded>\n";
print "<INPUT TYPE=HIDDEN NAME=dline SIZE=-1 VALUE=$dline><INPUT TYPE=HIDDEN
NAME=tcolor SIZE=-1 VALUE=$tcolor><INPUT TYPE=HIDDEN NAME=dialflag SIZE=-1
VALUE=$dialflag><INPUT TYPE=HIDDEN NAME=pseudo SIZE=-1 VALUE=$pseudo><INPUT
TYPE=HIDDEN NAME=showid
SIZE=-1 VALUE=$showid>\n";

print "<center></FONT><input type=text NAME=message size=70 maxlength=400>
<CENTER>\n";
 print "<CENTER><TABLE BORDER=1 width=auto>\n";
 print "<TR><TD WIDTH=80%><center>文本颜色: <INPUT TYPE=RADIO NAME=tcolor
VALUE=#FFFFFF><FONT COLOR=#FFFFFF>white</FONT><INPUT TYPE=RADIO NAME=tcolor
VALUE=#66FFFF><FONT COLOR=#66FFFF>blue</FONT><INPUT TYPE=RADIO NAME=tcolor
VALUE=#66FF66><FONT
COLOR=#66FF66>green</FONT><INPUT TYPE=RADIO NAME=tcolor VALUE=#FF0000><FONT
COLOR=#FF0000>red</FONT><INPUT TYPE=RADIO NAME=tcolor VALUE=#FFFF00><FONT
COLOR=#FFFF00>yellow</FONT><INPUT TYPE=RADIO NAME=tcolorVALUE=#FFCC00>orange
</FONT><br><FONT
color=#66FF66 size=2>Refresh rate (sec) : </FONT><SELECT NAME=refresh><OPTION
SELECTED>$refrate<OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION><OPTION>
4</OPTION><OPTION>5</OPTION><OPTION>6</OPTION><OPTION>7</OPTION><OPTION>
8</OPTION><OPTION>9</OPTION><OPTION>10</OPTION><OPTION>11</OPTION><OPTION>
12</OPTION></SELECT>- msg
lines<SELECT NAME=nbline><OPTION
SELECTED>$nbline<OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION><OPTION>
4</OPTION><OPTION>5</OPTION><OPTION>6</OPTION><OPTION>7</OPTION><OPTION>
8</OPTION><OPTION>9</OPTION><OPTION>10</OPTION><OPTION>11</OPTION><OPTION>
12</OPTION></SELECT></FONT>
- <FONT size=3><A href=$loginurl>change nickname</A> - <FONT color=#66FF66
size=3> <a href=$helpfile target=read> Help</A></CENTER></TR></TD>\n";

 print "<TD WIDTH=80%><center><B><I>C<FONT size=2 COLOR=#66FF66>o</FONT>l<FONT
size=2 COLOR=FF0000>o</FONT>r</B></I><FONT size=2 COLOR=#66FFFF>Chat</FONT>
<FONT size=2 COLOR=#FFFF00> v.1.0 - <INPUT TYPE=SUBMIT NAME=Submit
VALUE=SEND></center></TD></TR></TABLE></FORM>\n";

$ipstatus = "你的IP地址是<B>PUBLISHED</B> !";

if ($ip eq $ipflag) {
$ipstatus = "你的IP地址别人不可见"
};
print "<center>IP地址状态: <FONT COLOR=#66FFFF>$ipstatus</Font></center>\n";
 print "</BODY></HTML>\n";




}

sub readmsg {

   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   if (length($buffer) < 5) {
         $buffer = $ENV{QUERY_STRING};
    }

  @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);


      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 $value =~ s/\n/ /g;
 $value =~ s/&nbsp;/ /g;

$FORM{$name} = $value;
   }
}


sub ouvrire_fichier {


  local ($filevar, $filemode, $fichier) = @_;

  open ($filevar,$filemode . $fichier) ||
     die ("Can't open $fichier");
}


sub ecrire_fichier {


  local ($filevar, $line) = @_;

  print $filevar ($line);
}


sub dinit {


$dialflag = "newdial";

 &ouvrire_fichier("FILE1",">",$dialpage);

 &ecrire_fichier("FILE1","<META HTTP-EQUIV=refresh CONTENT=$refrate;
url=dial.html>\n");
 &ecrire_fichier("FILE1","<html><head><title>CONTACT+ - VALIDATION</title>
</head>\n");
 &ecrire_fichier("FILE1","<BODY TEXT=#FFCC0F BGCOLOR=#000000 LINK=#FFFF66
VLINK=#FFFF66 ALINK=#FF0000>\n");

  close(FILE1);

}
#读主机IP地址
sub hostid {
$realip = $ENV{'REMOTE_ADDR'};
 $ip = $ENV{'REMOTE_HOST'};

}

--
※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.212.56]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: linux.szu.edu.cn]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.22]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店