zoukankan      html  css  js  c++  java
  • Ubuntu下用apache+perl搭建最简单的聊天室

    最近学习了下perl,尝试自己搭建一个聊天室,现已搭建成功,但设计方法很简陋,误见笑,收获在于对apache、html、perl都有了些许认识,后面打算学习LAMP(Linux+Apache+MySQL+PHP)搭建一个在线听歌网页。


    操作系统:Ubuntu 12.04.2 LTS

    linux内核:Linux ubuntu 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    apache版本:Apache/2.2.22 (Ubuntu)
    编程语言:HTML + perl


    一、安装apache
    sudo apt-get install apache2


    二、编写HTML聊天WEB界面


    1、chatroom.html文件代码:


    <?xml version = "1.0" encoding = "utf-8"?>
    <!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.1//EN"
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns = "http://www.w3.org/1999/xhtml">


    <FRAMESET ROWS = "*,65">
    <FRAME SRC = message.htm>
    <FRAME SRC = login.htm>
    </FRAMESET>


    2、message.htm文件代码:


    <html><head><META HTTP-EQUIV = "REFRESH" CONTENT = "4"></head><body>
    </body></html>


    3、login.htm文件代码:


    <?xml version = "1.0" encoding = "UTF-8"?>
    <!DOCTYPE html PUBLIC "-//w3c//DTD XHTML 1.1//EN"
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html><meta charset="utf-8" /><body>
    <form action = "./chatroom.pl" method = "post">输入你的名字:
    <input type = "text" name = "username">
    <input type = "submit" value = "开始聊天">
    <input type = "hidden" name = "message" value = "connected">
    </form></body></html>


    三、用perl编写cgi程序


    chatroom.pl文件代码:
    #!/usr/bin/perl -w


    $buffer = "";


    print "Content-type:text/html\n\n";
    &get_form_data;
    open(MESSAGE,"/var/www/message.htm");


    @lines = <MESSAGE>;
    close(MESSAGE);
    $now_string = localtime;
    @thetime = split(/ +/,$now_string);


    print "<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><body>\n";
    print "<form action = \"./chatroom.pl\" method = \"post\">\n";
    print "<input name = username type = hidden value = $data[1]>\n";
    print "<input type = text name = message size = 40>\n";
    print "<input type = submit value = \"发言\"></form>\n";


    if($data[3]ne"")
    {
    $newmessage = "<br>$data[1]:$data[3](发送时间:$thetime[3])\n";


    open(NEW,">/var/www/message.htm");
    print NEW "<html><head><META HTTP-EQUIV = \"REFRESH\" CONTENT = \"4\"></head><body>\n";
    #print NEW encode("utf-8",decode("utf-8",$newmessage));
    print NEW $newmessage;


    $limit_lines = 10;
    if($#lines < 10)
    {$limit_lines = $#lines;}
    for($i = 1;$i < $limit_lines;$i++)
    {
    #print NEW encode("utf-8",decode("utf-8",$lines[$i]));
    print NEW "$lines[$i]";
    }
    print NEW '</body></html>';
    close(NEW);
    }
    print "</body></html>\n";
    exit 0;


    sub get_form_data {


    read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
    @pairs = split(/&/,$buffer);
    @data=();
    foreach $pair(@pairs)
    {
    @a = split(/=/,$pair);
    $name = $a[0];
    $value = $a[1];
    $value =~s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
    push (@data,$name);
    push (@data,$value);
    }
    }


    四、移动文件
    将编写好的文件chatroom.html、message.htm、login.htm和chatroom.pl统一移动到/var/www/目录下。(此处可以通过配置apache自由设置目录)


    五、修改文件权限
    还没具体尝试到最安全可靠的权限级别,目前统一将html文件、perl文件、/var/www/文件夹全部修改权限为777。
    指令: chmod 777 /etc/www/
    chmod 777 /etc/www/chatroom.html
    chmod 777 /etc/www/message.htm
    chmod 777 /etc/www/login.htm
    chmod 777 /etc/www/chatroom.pl


    六、配置apache,使其支持perl
    1、进入/etc/apache2/sites-available/目录
    2、打开其中的default文件
    3、修改内容,最终内容如下:
    <VirtualHost *:80>
    ServerAdmin webmaster@localhost


    DocumentRoot /var/www/
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    allow from all
    satisfy all
    </Directory>
    <Directory /var/www/>
    Options FollowSymLinks MultiViews
    AllowOverride None
    Order deny,allow
    allow from all
    </Directory>


    ScriptAlias /cgi-bin/ /var/www/
    <Directory "/var/www/">
    AllowOverride all
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order deny,allow
    Allow from all
    AddHandler cgi-script .cgi .pl
    </Directory>


    ErrorLog ${APACHE_LOG_DIR}/error.log


    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn


    CustomLog ${APACHE_LOG_DIR}/access.log combined


        Alias /doc/ "/usr/share/doc/"
        <Directory "/usr/share/doc/">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride none
            Order deny,allow
            Deny from all
            Allow from 127.0.0.0/255.0.0.0 ::1/128
        </Directory>


    </VirtualHost>


    七、重新开启apache服务
    指令:service apache2 restart


    八、在浏览器输入地址测试是否成功!
    http://你服务的IP地址/chatroom.html























  • 相关阅读:
    hdu 1028 Ignatius and the Princess III (n的划分)
    CodeForces
    poj 3254 Corn Fields (状压DP入门)
    HYSBZ 1040 骑士 (基环外向树DP)
    PAT 1071 Speech Patterns (25)
    PAT 1077 Kuchiguse (20)
    PAT 1043 Is It a Binary Search Tree (25)
    PAT 1053 Path of Equal Weight (30)
    c++ 常用标准库
    常见数学问题
  • 原文地址:https://www.cnblogs.com/fengty90/p/3768872.html
Copyright © 2011-2022 走看看