#! /usr/local/bin/perl # ↑この上のPerlのパスを書き換えるのはお約束ですね #========================================================================================== # # マルチボード掲示板システム 『MultiBBS』ver 1.3 : 掲示板一覧用スクリプト # # Copyright Shinobu Suzuki 1998. All rights reserved. #----------------------------------------------------------------------------------------- # HomePage : http://www.aikis.or.jp/~s-suzuki/cgilabo/ # E-mail : s-suzuki@aikis.or.jp #----------------------------------------------------------------------------------------- # ■MultiBBSで開設されている掲示板の一覧を表示します # ■リスト表示の形式を指定することができます(更新順など) # ■指定した時間内に更新されている場合、案内表示をつけることができます #========================================================================================== # 初期設定 #----------------------------------------------------------------------------------------- $script = 'multibbs.cgi'; # MultiBBSシステムのベースとなるスクリプト名 $version = '1.31'; # バージョン情報(変更しないでください) #---------------------------------------------------------- # このスクリプトでのみ必要な設定 #---------------------------------------------------------- $title = "MultiBBS:掲示板一覧"; # 掲示板タイトル $title_image = ""; # タイトル画像(URL) $title_align = 0; # タイトルの表示位置(0:左、1:中央、2:右) $bg_col = '#ffffff'; # 背景色 $bg_image = ''; # 背景画像(URL) $title_col = '#000080'; # タイトルの色 $text_col = '#000000'; # テキストの色 $link_col = '#0000ff'; # リンクの色 $alink_col = '#ff0000'; # リンク中の色 $vlink_col = '#000088'; # 既リンクの色 $update_col = '#ff0000'; # 更新メッセージつける案内の色 $linkname1 = ''; # 外部リンク その1 $link1 = ''; # 外部リンク その1(URL) $linkname2 = '戻る'; # 外部リンク その2 $link2 = './'; # 外部リンク その2(URL) $linkname3 = '掲示板管理'; # 外部リンク その3 $link3 = 'admin.cgi'; # 外部リンク その3(URL) $readme = '現在開設されている掲示板の一覧です。'; # 掲示板の説明文 #---------------------------------------------------------- # リスト表示のソート指定 # 0:ソートしない # 1:ログファイルの更新順 # 2:50音順(ボード名) #---------------------------------------------------------- $sort_mode = 1; #---------------------------------------------------------- # 更新案内表示 # 0:案内はしない # 1:案内をする #---------------------------------------------------------- $update_mode = 1; #---------------------------------------------------------- # 更新案内表示のための経過時間(秒数で指定) # 12時間 : 60*60*12 # 24時間 : 60*60*24 # 1週間 : 60*60*24*7 などなど # この時間判定は、結構いい加減かもしれません ^^;; #---------------------------------------------------------- $update = 60*60*24; #---------------------------------------------------------- # CERN HTTPDなどのサーバーの場合で、ファイル関係のエラーが # 出る場合、設置するディレクトリのフルパスを指定してみて下 # さい。なお、最後は / で終わること。 # $path = "/home/users/s-suzuki/public_html/bbs/"; #---------------------------------------------------------- $path = ""; #===================================================================== # これより、処理の開始 #===================================================================== $time_now = time; # 更新案内用に現在時刻を取得 $update2 = $time_now - $update; # 更新案内の目安となる時刻 &html; exit; #===================================================================== # 処理はここまで(以下は、サブルーチン) #===================================================================== #----------------------------------------------------- # 画面表示 #----------------------------------------------------- # sub html { print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "$title\n"; print "\n\n"; if ( $bg_image ne "" ) { print "\n\n"; } else { print "\n\n"; } if( $title_align == 1 ) { print "
"; } elsif ( $title_align == 1 ) { print "
"; } if( $title_image ne "" ) { print "\"$title\""; } else { print "$title
\n"; } if( $title_align != 0 ) { print "
\n"; } print "
\n\n"; print "
$readme
\n"; print "

\n"; if ( $linkname1 ne "" ) { print "$linkname1\n"; } if ( $linkname2 ne "" ) { print "$linkname2\n"; } if ( $linkname3 ne "" ) { print "$linkname3\n"; } print "
\n"; #----------------------------------------------------- # ボードの一覧表示 #----------------------------------------------------- &bord_list; print "\n"; print "\n"; } #----------------------------------------------------------------- # エラーメッセージの出力 #----------------------------------------------------------------- # sub error { $error_msg = $_[0]; print "Content-type: text/html\n\n"; print "\n\n$CFG_DATA{'title'}\n\n"; print "\n"; print "

おしらせ

\n"; print "$error_msg\n"; print "

\n\n\n"; exit; } #----------------------------------------------------------------- # ボード一覧の作成(メイン画面用) #----------------------------------------------------------------- # sub bord_list { $i = 0; if ( $path ne "" ) { opendir(DIR,"$path"."log/"); } else { opendir(DIR,"./log/"); } @readlist = grep(/.cfg/, readdir(DIR)); closedir(DIR); foreach $bord (@readlist) { ($fname, $ext) = split( /\./, $bord ); if ( $path ne "" ) { $tempname = "$path"."log/$bord"; } else { $tempname = "./log/$bord"; } if( open( DB, $tempname )) { @lines = ; close(DB); foreach $line (@lines) { ($name,$value) = split(/\,/,$line); if( $name eq 'title' ) { $bordtitle = $value; $bordtitle =~ s/<(.*?)>//ig; last; } } if( $sort_mode == 1 ) { if ( $path ne "" ) { $log_file = "$path"."log/$fname".".log"; } else { $log_file = "./log/$fname".".log"; } ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat $log_file; } else { $mtime = "0"; } push( @datalist, "$mtime\,$fname\,$bordtitle" ); $i++; } } print "

\n"; if ( $i == 0 ) { print "ボードは開設されていません。\n"; } else { if( $sort_mode == 1 ) { @index = sort {$b <=> $a;} @datalist; } elsif( $sort_mode == 2 ) { @index = sort @datalist; } else { @index = @datalist; } print "
    \n"; foreach $temp (@index) { ($mtime, $fname, $bordtitle) = split( /\,/, $temp); print "
  1. $bordtitle [$fname]"; if( $update_mode == 1 ) { print " New!" if( $mtime > $update2 ); } print "
  2. \n"; } print "
\n"; } print "
\n"; exit; }