CGI プログラム2(wwwboard)

返回


omniboard 论坛程序是由 Matt Wright 的 WWWBoard 改进而来,该程序增加了汉字, 文件锁定,笔名注册,分页,封锁IP,防止重贴,自动恢复等许多功能。该程序在免 费网站 http://www.hypermart.net 上完成调试。 Matt Wright 的 URL 是: http://worldwidemart.com/scripts/wwwboard.shtml 本程序含有下列文件: 1. readme.txt - 安装指南,本文。 2. index.html - 索引文件,该索引文件必须放入论坛文件 的子目录中,以防止密码文件等被暴露。 3. addnew.html - 加新贴网页。 4. mainboard.html - 存放贴子目录的网页。 5. mainpage.pl - 分页显示论坛贴子目录。 6. mainboard.pl - 上贴,跟贴程序。 7. register.html - 注册笔名网页。 8. register.pl - 注册笔名程序。 9. serial.txt - 贴号计数器。 10. xxxx_bywhom.txt - 存放上贴者的IP信息。 11. xxxx_dup.txt - 存放前一个贴子的信息,用于防止重贴。 12. xxxx_badguy.txt - 存放捣乱者的IP,取消其上贴权。 13. xxxx_regpwd.txt - 注册笔名密码文件。 14. xxxx_admnpwd.txt - 版主密码文件。 15. yyyy_admnboard.html- 论坛管理网页。 16. yyyy_admnboard.pl - 论坛管理程序。 17. yyyy_admnquick.pl - 论坛管理程序,较快。 18. messages/ - 用于存放贴子的子目录。 你需要对这些文件进行必要的设定,使其能在你的服务器上正常运行。下面是 有关说明。 ___________________________________________________________________________ forum ===== 你要创建一个名叫 forum 的子目录, 把上述文件放入该目录中。 目录的访问权限应设置为 rwxrwxrwx ___________________________________________________________________________ readme.txt ========== 请仔细阅读本文。 ___________________________________________________________________________ index.html ========== 索引文件,该索引文件必须放入论坛文件的目录中,以防止密码文件等被暴露。 ___________________________________________________________________________ addnew.html =========== 加新贴网页。设定上贴程序的 URL 和注册笔名网页的 URL。请根据你的系统进行设定。 <form method=POST action="http://freeland.hypermart.net/forum/mainboard.pl"> <a href="http://freeland.hypermart.net/forum/register.html"> ___________________________________________________________________________ mainboard.html ============== 贴子目录主文件。不要公布该文件,而应公布 mainpage.pl 作为论坛网址。 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ mainpage.pl =========== 有的服务器规定该程序必需置于 cgi-bin 中,另一些服务器则允许该程序置于任何 位置,还有的服务器规定该程序必需用 .cgi 扩展名,在这种情况下,你则需要把 所有以 .pl 结尾的程序改为以 .cgi 结尾。 论坛的外观取决于该程序的设置,你可以设置论坛名,版主联系地址等。 该文件的访问权限应设置为 rwxr_xr_x 下面是具体说明: ############################################################################## # Define Variables $basedir = "/data1/hypermart.net/freeland/forum"; 该变量应设置为论坛目录的绝对路径 (注: 在有的服务器上,该变量也可设置为相对路径, 如: $basedir = "." 或者 $basedir = "../forum" 在 NT IIS 4.0 环境下, 则应改为类似于如下的格式: $basedir = "c:\\InetPub\\scripts"; ) $baseurl = "http://freeland.hypermart.net/forum"; 该变量应设置为论坛目录的URL $page_url = "http://freeland.hypermart.net/forum/mainpage.pl"; 分页显示论坛贴子目录的 URL。 $addnewfile = "addnew.html"; 加新贴网页的 URL。 $mesgfile = "mainboard.html"; 主目录文件名。 $title = "论坛主页"; # Done ########################################################################### ########################################################################### # Configure Options $posts_per_page = 100; 每页贴子数。 # Done ___________________________________________________________________________ mainboard.pl ============ 有的服务器规定该程序必需置于 cgi-bin 中,另一些服务器则允许该程序置于任何 位置,还有的服务器规定该程序必需用 .cgi 扩展名,在这种情况下,你则需要把 所有以 .pl 结尾的程序改为以 .cgi 结尾。 该文件的访问权限应设置为 rwxr_xr_x 这是所需设置的最复杂的文件,它有许多变量和选项,下面是具体说明: ########################################################################### # Define Variables $basedir = "/data1/hypermart.net/freeland/forum"; 该变量应设置为论坛目录的绝对路径 (注: 在有的服务器上,该变量也可设置为相对路径, 如: $basedir = "." 或者 $basedir = "../forum" 在 NT IIS 4.0 环境下, 则应改为类似于如下的格式: $basedir = "c:\\InetPub\\scripts"; ) $baseurl = "http://freeland.hypermart.net/forum"; 该变量应设置为论坛目录的URL $siteid = "freeland"; 该变量必需为 $baseurl 的子字符串,用于防止从论坛以外的网页向 论坛加贴。如果该变量没有设成 $baseurl 的子字符串,在上贴时会 得到以下出错信息: “错误: 该贴重复”。 $cgi_url = "http://freeland.hypermart.net/forum/mainboard.pl"; 上贴和跟贴程序的 URL。 $page_url = "http://freeland.hypermart.net/forum/mainpage.pl"; 分页显示论坛贴子目录的 URL。 $mesgdir = "messages"; 用于存放贴子的子目录名。所有的贴子都存于该子目录内。 $datafile = "serial.txt"; 贴号计数器。 $usrpwdfile = "xxxx_regpwd.txt"; 注册笔名密码文件。 $trackfile = "xxxx_bywhom.txt"; 上贴者 IP 纪录文件。 $baddiefile = "xxxx_badguy.txt"; 捣乱者 IP 文件,取消其上贴权。 $dupfile = "xxxx_dup.txt"; 存放前一个贴子的基本信息,用于防止重贴。 $busyfile = "busy.txt"; 繁忙标记文件,用于文件锁定,该文件由系统自动产生,删除。 当服务器发生故障的情况下,有时该文件未被删除,会导致上 贴或删贴时,系统给出“系统繁忙”信息,这种状态会持续 十分钟左右,然后自动消失。你可以手工删除该文件,立即恢复 上贴和删贴功能。 $mesgfile = "mainboard.html"; 贴子目录主文件。 $faqfile = "faq.html"; $ext = "html"; 贴子扩展名。 $title = "论坛主页"; $title_p = "论坛主页"; # Done ########################################################################### ########################################################################### # Configure Options $show_faq = 0; # 1 - YES; 0 = NO 是否显示常见问题,应设为 0。 $allow_html = 0; # 1 = YES; 0 = NO 是否允许 html 文法, 应设为 0。 $quote_text = 0; # 1 = YES; 0 = NO 是否引用, 应设为 0。 $subject_line = 2; # 0 = Quote Subject Editable; 1 = Quote Subject # UnEditable; 2 = Don't Quote Subject, Editable. 应设为 2。 $use_time = 1; # 1 = YES; 0 = NO 应设为 1。 $max_name_length = 20; 最大笔名长度。 $max_upwd_length = 20; 最大密码长度。 $max_subj_length = 80; 最大标题长度。 $max_urim_length = 200; 最大连接长度。 $max_body_length = 30000; 最大内容长度。 # Done ___________________________________________________________________________ register.html ============= 注册笔名网页。设定注册笔名程序的 URL。请根据你的系统进行设定。 <form method=POST action="http://freeland.hypermart.net/forum/register.pl"> ___________________________________________________________________________ register.pl =========== 有的服务器规定该程序必需置于 cgi-bin 中,另一些服务器则允许该程序置于任何 位置,还有的服务器规定该程序必需用 .cgi 扩展名,在这种情况下,你则需要把 所有以 .pl 结尾的程序改为以 .cgi 结尾。 该文件的访问权限应设置为 rwxr_xr_x 下面是具体说明: ############################################################################## # Define Variables $basedir = "/data1/hypermart.net/freeland/forum"; 该变量应设置为论坛目录的绝对路径 (注: 在有的服务器上,该变量也可设置为相对路径, 如: $basedir = "." 或者 $basedir = "../forum" 在 NT IIS 4.0 环境下, 则应改为类似于如下的格式: $basedir = "c:\\InetPub\\scripts"; ) $reg_url = "http://freeland.hypermart.net/forum/register.pl"; 注册笔名程序的 URL。 $usrpwdfile = "xxxx_regpwd.txt"; 笔名密码文件。 $busyfile = "busy.txt"; 繁忙标记文件,用于文件锁定,该文件有系统自动产生,删除。 $baddiefile = "xxxx_badguy.txt"; 捣乱者 IP 文件,取笑其注册权。 $mesgfile = "http://freeland.hypermart.net/forum/mainboard.html"; 贴子目录主文件的 URL。 $addnewfile = "http://freeland.hypermart.net/forum/addnew.html"; 加新贴网页的 URL。 # Done ########################################################################### ########################################################################### # Configure Options $show_faq = 0; # 1 - YES; 0 = NO $allow_html = 1; # 1 = YES; 0 = NO $quote_text = 0; # 1 = YES; 0 = NO $subject_line = 2; # 0 = Quote Subject Editable; 1 = Quote Subject # UnEditable; 2 = Don't Quote Subject, Editable. $use_time = 1; # 1 = YES; 0 = NO $max_name_length = 20; 最大笔名长度。 $max_upwd_length = 20; 最大密码长度。 # Done ___________________________________________________________________________ serial.txt ========== 贴号计数器文件。初值为 1。 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ xxxx_bywhom.txt =============== 上贴者纪录文件。请用一个复杂而无意义的字符串(包括大小写字母,数字)代替 xxxx,使别人无法猜出。 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ xxxx_dup.txt ============ 前一贴信息文件。请用一个复杂而无意义的字符串(包括大小写字母,数字)代替 xxxx,使别人无法猜出。 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ xxxx_badguy.txt =============== 捣乱者 IP 文件。请用一个复杂而无意义的字符串(包括大小写字母,数字)代替 xxxx,使别人无法猜出。 把捣乱者的 IP 放入该文件可以取消其上贴权。 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ xxxx_regpwd.txt =============== 注册笔名密码文件。请用一个复杂而无意义的字符串(包括大小写字母,数字)代替 xxxx,使别人无法猜出。 此文件非常重要,应定期下载保存。 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ xxxx_admnpwd.txt =============== 版主密码文件,用于论坛管理。请用一个复杂而无意义的字符串(包括大小写字母,数字) 代替 xxxx,使别人无法猜出。 版主笔名/密码的初始值为:WebAdmin/WebBoard 如果你的系统使用不同的加密方式,该密码可能不工作。在这种情况下,你可以在以下网 址找到解决办法: http://worldwidemart.com/scripts/faq/wwwboard.shtml 或者,你也可以采取以下步骤: 1) 在 xxxx_admnboard.pl 和 xxxx_admnquick.pl 程序中找到以下段落: 2) 用 # 符号注释掉指定的行,这样可以绕过密码检查。 3) 选择更改笔名密码,填入笔名和密码。 4) 去掉注释符号,恢复原有程序。 ----------------------------------------------------------------------- elsif ($FORM{'action'} eq 'change_passwd') { open(PASSWD,"$basedir/$passwd_file") || &error(passwd_file); $passwd_line = <PASSWD>; chop($passwd_line) if $passwd_line =~ /\n$/; close(PASSWD); ($username,$passwd) = split(/:/,$passwd_line); if (!($FORM{'passwd_1'} eq $FORM{'passwd_2'})) { &error(not_same); } $test_passwd = crypt($FORM{'password'}, substr($passwd, 0, 2)); # if ($test_passwd eq $passwd && $FORM{'username'} eq $username) { open(PASSWD,">$basedir/$passwd_file") || &error(no_change); $new_password = crypt($FORM{'passwd_1'}, substr($passwd, 0, 2)); if ($FORM{'new_username'}) { $new_username = $FORM{'new_username'}; } else { $new_username = $username; } print PASSWD "$new_username:$new_password"; close(PASSWD); # } # else { # &error(bad_combo); # } &return_html(change_passwd); } ----------------------------------------------------------------------- 该文件的访问权限应设置为 rw_rw_rw_ ___________________________________________________________________________ yyyy_admnboard.html =================== 论坛网页。设定论坛管理程序的 URL。请根据你的系统进行设定。 <td><a href="http://freeland.hypermart.net/forum/yyyy_admnboard.pl">admin</td> <td><a href="http://freeland.hypermart.net/forum/yyyy_admnquick.pl">admin(fast)</td> ___________________________________________________________________________ yyyy_admnboard.pl ================= 有的服务器规定该程序必需置于 cgi-bin 中,另一些服务器则允许该程序置于任何 位置,还有的服务器规定该程序必需用 .cgi 扩展名,在这种情况下,你则需要把 所有以 .pl 结尾的程序改为以 .cgi 结尾。 版主笔名/密码的初始值为:WebAdmin/WebBoard 该文件的访问权限应设置为 rwxr_xr_x 下面是具体说明: ########################################################################### # Define Variables $basedir = "/data1/hypermart.net/freeland/forum"; 该变量应设置为论坛目录的绝对路径 (注: 在有的服务器上,该变量也可设置为相对路径, 如: $basedir = "." 或者 $basedir = "../forum" 在 NT IIS 4.0 环境下, 则应改为类似于如下的格式: $basedir = "c:\\InetPub\\scripts"; ) $baseurl = "http://freeland.hypermart.net/forum"; 该变量应设置为论坛目录的URL $cgi_url = "http://freeland.hypermart.net/forum/yyyy_admnboard.pl"; 论坛管理程序程序的 URL。 $mesgdir = "messages"; 用于存放贴子的子目录名。所有的贴子都存于该子目录内。 $datafile = "serial.txt"; 贴号计数器。 $mesgpage = "mainboard.html"; 贴子目录主文件。 $mesgfile = "mainboard.html"; 贴子目录主文件。 $passwd_file = "xxxx_admnpwd.txt"; 注册笔名密码文件。 $busyfile = "busy.txt"; 繁忙标记文件,用于文件锁定,该文件有系统自动产生,删除。 $posts_per_page = 100; 每页贴子数。 $ext = "html"; 贴子扩展名。 $title = "Main Board"; $use_time = 1; # 1 = YES; 0 = NO # Done ___________________________________________________________________________ yyyy_admnquick.pl ================= 有的服务器规定该程序必需置于 cgi-bin 中,另一些服务器则允许该程序置于任何 位置,还有的服务器规定该程序必需用 .cgi 扩展名,在这种情况下,你则需要把 所有以 .pl 结尾的程序改为以 .cgi 结尾。 版主笔名/密码的初始值为:WebAdmin/WebBoard 该文件的访问权限应设置为 rwxr_xr_x 下面是具体说明: ########################################################################### # Define Variables $basedir = "/data1/hypermart.net/freeland/forum"; 该变量应设置为论坛目录的绝对路径 (注: 在有的服务器上,该变量也可设置为相对路径, 如: $basedir = "." 或者 $basedir = "../forum" 在 NT IIS 4.0 环境下, 则应改为类似于如下的格式: $basedir = "c:\\InetPub\\scripts"; ) $baseurl = "http://freeland.hypermart.net/forum"; 该变量应设置为论坛目录的URL $cgi_url = "http://freeland.hypermart.net/forum/yyyy_admnquick.pl"; 论坛管理程序程序的 URL。 $mesgdir = "messages"; 用于存放贴子的子目录名。所有的贴子都存于该子目录内。 $datafile = "serial.txt"; 贴号计数器。 $mesgpage = "mainboard.html"; 贴子目录主文件。 $mesgfile = "mainboard.html"; 贴子目录主文件。 $passwd_file = "xxxx_admnpwd.txt"; 注册笔名密码文件。 $busyfile = "busy.txt"; 繁忙标记文件,用于文件锁定,该文件有系统自动产生,删除。 $posts_per_page = 100; 每页贴子数。 $ext = "html"; 贴子扩展名。 $title = "Main Board"; $use_time = 1; # 1 = YES; 0 = NO # Done ___________________________________________________________________________ messages ======== 在 forum 目录中, 你要创建一个名叫 messages 的子目录, 用于放置贴子。 目录的访问权限应设置为 rwxrwxrwx, 如果服务器为了安全不允许作此设置, 则可设为 rw_rw_rw_ . 请仔细阅读服务器有关CGI的使用说明,并在必要时与 网络管理员联系. ___________________________________________________________________________
戻る