荔园在线

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

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


发信人: icefire (懒懒的心懒懒的我), 信区: Program
标  题: [转载] [转寄] Perl CGI脚本系列(2)--搜索发送下载
发信站: BBS 荔园晨风站 (Sun Nov 22 19:16:28 1998), 站内信件

【 以下文字转载自 icefire 的信箱 】
【 原文由 icefire.bbs@melon.gznet.edu.cn 所发表 】
发信人: Anton (庭草无人随意绿), 信区: CGI
标  题: Perl CGI脚本系列(2)--搜索发送下载
发信站: 华南网木棉站 (Thu Nov 19 17:54:34 1998), 转信

CGI脚本部分:

#!/usr/local/bin/perl
###################################################################
#文件名:ssfile.pl                                                    ##功  能:
通过关键字搜索文件并将结果列表,同时可直接下载或者E-mail发送 ##作  者:gambler
 (gambler@188.net)                                  ##版本号:serach_send_file
v1.0
########################################################################
# 变量的定义
$mailprog = '/usr/bin/sendmail';
# sendmail 的绝对路径,可以使用 “which perl”指令获得
$url = 'http://www.sinoboy.com';
# 主页地址
$fromaddr = 'sinoboy@sinoboy.com';
# 管理员的E-mail地址
$organization = '网站名称';
# 网站的名称
$fromname = 'The name of Webmaster';
# 管理员姓名
$filebase = '/home1/sinoboy/www/down/soft';
# 存放供用户下载的软件目录
# 目前仅提供一个下载目录,在更新版本中将提供多个目录同时搜索的功能
# 注意:末尾不要加反斜杠!
$fileurl = 'http://www.sinoboy.com/down/soft/';
#存放供用户下载的软件的 url@referers = ("www.sinoboy.com");
# 该数组包括可以此CGI的主页地址
# 上述部分为变量定义部分,一般情况下只需改动此部分内容
##########################
# 子程序,检验主页地址是否可以使用此CGI
&check_url;
# 读取标准输入
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @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;
      $FORM{$name} = $value;
}
$string=$FORM{'terms'};
#获取外部参数
if ($ENV{'QUERY_STRING'} eq "getfile") {
&getfile;
}
# 子程序,获取日期
&get_date;
# 子程序,转换标准输入变量
&get_variables;
# 子程序,E-mail文件主题部分
&send_mail;
# 子程序,查询文件后的返回页面
&return_html;
exit;
sub check_url {
   if ($ENV{'HTTP_REFERER'}) {
      foreach $referer (@referers) {
         if ($ENV{'HTTP_REFERER'} =~ /$referer/i) {
            $check_referer = '1';
            last;
         }
      }
   }
   else {
      $check_referer = '1';
   }
   if ($check_referer != 1) {
      &error('bad_referer');
   }
}
sub get_date {
   @days = ('星期日','星期一','星期二','星期三','星期四','星期五','星期六');
   @months = ('1月','2月','3月','4月','5月','6月','7月',
              '8月','9月','10月','11月','12月');
   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
   if ($hour < 10) { $hour = "0$hour"; }
   if ($min < 10) { $min = "0$min"; }
   if ($sec < 10) { $sec = "0$sec"; }
   $date = "19$year年$months[$mon] $mday日,$days[$wday],$hour\:$min\:$sec";
}
sub get_variables {
   if ($FORM{'realname'}) {
      $realname = $FORM{'realname'};
   }
   if ($FORM{'email'} =~ /.*\@.*\..*/) {
      $email = $FORM{'email'};
   }
   if ($FORM{'comments'}) {
      $comments = $FORM{'comments'};
   }
}
sub return_html {
   if ($email eq "" || $files[0] eq "") {
      print "Content-type: text/html\n\n";
      print "<html><head><title>抱歉</title></head>\n";
      print "<body bgcolor=ffffff><center><h1>很遗憾!</h1></center>\n";
      print "抱歉, 你需要的文件没有找到,\n";
      print "或者是你的电子信箱不合法,\n";
      print "请按“back”键\n";
      print "再试一次.</body></html>\n";
      exit;
   }
   else {
      print "Location: $url\n\n";
   }
}
sub send_mail {
   foreach $file (@files) {
      if (-e "$filebase/$file") {
         open(MAIL,"|$mailprog -t");
         print MAIL "To: $email ($realname)\n";
         print MAIL "From: $fromaddr ($fromname)\n";
         if ($organization) {
            print MAIL "$organization\n";
         }
         else {
            print MAIL "传送文件\n";
         }
         print MAIL "Subject: $file\n";
         print MAIL "X-Courtesy-Of: SSfile! V1.0\n\n";
         open(INPUT,"$filebase/$file")||&error;
         while (<INPUT>) {
            chop $_;
            print MAIL $_,"\n";
         }
         close (INPUT);
         close (MAIL);
      }
      else {
         print "Content-type: text/html\n\n";
         print "<head><title>Sorry</title></head>\n";
         print "<body bgcolor=ffffff><center><h1>Sorry</h1></center>\n";
         print "抱歉,没有找到你需要的文件\n";
         print "请你和管理员联系.<p>\n";
         print "</body></html>\n";
         open(REMAIL,"|$mailprog -t");
         print REMAIL "To: $fromaddr\n";
         print REMAIL "From: $email ($realname)\n";
         if ($organization) {
            print REMAIL "$organization\n";
         }
         else {
            print REMAIL "发送文件失败\n";
         }
         print REMAIL "Subject: 文件不存在\n";
         print REMAIL "X-Courtesy-Of: SSfile V1.0!\n\n";
         print REMAIL "$email ($realname)\n";
         print REMAIL "用户需要的文件是: @files\n";
         print REMAIL "$comments\n";
         close (REMAIL);
         exit;
      }
   }
   &mail_owner;
}
sub mail_owner {
   if($files[0] ne "") {
      open(REMAIL,"|$mailprog -t");
      print REMAIL "To: $fromaddr\n";
      print REMAIL "From: $email ($realname)\n";
      if ($organization) {
         print REMAIL "$organization\n";
      }
      else {
         print REMAIL "文件发送失败\n";
      }
      if ($CONFIG{'subject'}) {
         print REMAIL "Subject: $subject\n";
      }
      else {
         print REMAIL "Subject: 文件: $files[0] 等.\n";
      }
      print REMAIL "X-Courtesy-Of: SSfile V1.0!\n\n";
      print REMAIL "$email ($realname)\n";
      print REMAIL " 用户需要下列文件:@files\n";
      print REMAIL "$comments";
      close (REMAIL);
   }
}
sub getfile {
   print "Content-type: text/html\n\n";
   print "<html><head><title>查询结果</title></head>\n";
   print "<body bgcolor=ffffff><center><h1>查询结果</h1></center>\n";
   print "<form method=\"post\" action=\"$ENV{'SCRIPT_NAME'}\">\n";
   print "<center><table border=1>\n";
   print "<tr valign=top><Td>直接下载:</td><td>\n";
   opendir(FILES,"$filebase");
   @allfiles = sort(grep(!/^\.\.?$/,readdir(FILES)));
   closedir(FILES);
   foreach$file(@allfiles) {
      if ($file=~/$string/){
      print "<a href=\"$fileurl$file\">$file</a><br>\n";
      }
   }
   print "</td></tr>\n";
   print "<tr valign=top><Td>E-mail发送:</td><td>\n";
   opendir(FILES,"$filebase");
   @allfiles = sort(grep(!/^\.\.?$/,readdir(FILES)));
   closedir(FILES);
   foreach$file(@allfiles) {
      if ($file=~/$string/){
      print "<input type=checkbox name=\"filename\" value=\"$file\">$file\n";
      }
   }
   print "</td></tr><tr valign=top><td>备忘录:</td><td>\n";
   print "<textarea wrap name=\"comments\" rows=5 cols=36></textarea><br>\n";
   print "</td></tr><tr><td>您的姓名:</td><td>\n";
   print "<input type=text size=40 name=\"realname\">*<br>\n";
   print "</td></tr><tr><td>您的E-mial:</td><td>\n";
   print "<input type=text size=40 name=\"email\">*<br>\n";
   print "</td></tr><tr><td></td><td>\n";
   print "<input type=submit value=\"发送文件\">\n";
   print "</td></tr></table></center></form>\n";
   print "<center><a href=\"$url\">返回主页</a></center>\n";
   print "</body></html>\n";
   exit;
}

}

}
--------------------------------------------
 | 在看得到的地方,我的眼睛和你在一块...... |
 | 在看不到你的地方,我的心和你在一块...... |
 --------------------------------------------

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


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

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