#!/usr/bin/perl # サーバーの環境に合わせて変更して下さい。 #-----------------------------------------------------------# # 罪と罰++ 二律背反 # # Copyright(C) 2001-2002 by Vivid Studio. BLANK BOARD # # Vivid Studio.[ http://www17.big.or.jp/~obochan/vivid/ ] # # BLANK BOARD [ http://pom.to/ ] # #-----------------------------------------------------------# $ver = '교류광장 v1.1'; # 버전 정보(변경 불가) #--- [注意事項] --------------------------------------------# # 1.このスクリプトは以下の利用規程に従って配布しています。 # # http://www24.big.or.jp/~obo/game/ore_/gild/ # #-----------------------------------------------------------# #=============================================================================== # 設定項目 #------------------------------------------------------------------------------- # 各種ファイル require './inc/ore_sub-bbs.cgi'; # 各種掲示板共通な設定項目読み込み $script = "./park.cgi"; # 이 스크립트의 경로 $logfile = "./logdata/park_log.cgi"; # 로그 파일 $memfile = "./logdata/park_mem.cgi"; # 참가자 파일 $lockkey = 0; # 파일 잠금(0=no 1=yes) $lockfile = "./camp.lock"; # 잠금 파일명 #------------------------------------------------------------------------------- # 環境設定 $title = "국제교류광장"; # 타이틀명 $max = 100; # 최대 보유 게시글 수 $reload_mn = 5; # 최단 리로드 간격(이 초 수 이내에 발언 시 에러[부하 대책]) $reload_limit= 120; # 이 시간(초) 동안 발언이 없으면 퇴실 처리 $com_limit = 240; # 코멘트 최대 글자수(반각 환산) $tagkey = 0; # 태그 허용 (0=no 1=yes) $nolink = 1; # URL 광고 배제 (0=no 1=yes) # 機種別設定 if($mv_mode eq 'mv'){ # 모바일용 설정 $log_last= 15; # 표시 행 수(모바일) # BODY 태그 디자인 $body = 'bgcolor="black" text="white" link="pink" vlink="pink" alink="pink"'; $hr_color= 'white'; # 구분선 색상(모바일) }else{ # PC용 설정 @reload_time= (90,120,180); # 리로드 시간 $log_last= 50; # 표시 행 수(PC) # BODY 태그 디자인 $body = 'bgcolor="#111122" text="#ddddee" link="#ffddee" vlink="#ffddee" alink="#ffddee"'; } #=============================================================================== # 以下処理 基本的にこれ以下はいいじらないように。 #------------------------------------------------------------------------------- # メイン処理 &axs_check; # アクセス制御 &decode; # フォームデコード &mandata_open; # 参加者ログ読み込み &get_time; # 日時取得 &member; if($mode eq "regist" && $com){ ®ist; } # 書き込み処理 &html; # ページ表示 #------------------------------------------------------------------------------- # 記事表示部 sub html { # 表示開始 &header; if($mv_mode eq 'mv'){ print <<"EOM"; $camp_info[$DAT{'camp'}][0] 전용
$title
EOM } else{ print <<"EOM";
$title
~ 참가자들의 쉼터 ~
새로고침:
EOM } # 参加者表示:$member ($mv_mode eq 'mv') ? print qq|참가자($num)
\n|: print qq|

참가자($num):$member

\n|; # ログを展開 open(IN,"$logfile") || &error("Open Error : $logfile"); local $log_last_flag=0; while () { $log_last_flag++; local($date,$nm,$camp,$com,$sogo,$addr,$host) = split(/<>/); $nm = qq|$nm [$sogo_p[$sogo]]| if($sogo); ($mv_mode eq 'mv') ? $com =~ s/하트/\&\#63726<\/font>/g : $com =~ s/하트/ゥ<\/span>/g ; ($mv_mode eq 'mv') ? print qq|$nm:$com [$camp_info[$camp][0] $date]
\n|: print qq|$nm : $com [ $camp_info[$camp][0] $date ]
\n|; last if $log_last_flag > $log_last; } close(IN); # 著作権表示(削除禁止) print "
\n"; ©right; exit; } #------------------------------------------------------------------------------- # ログ書き込み処理 sub regist { # ファイルロック if ($lockkey) { &lock; } # ログを読み込み open(IN,"$logfile") || &error("Open Error : $logfile"); @lines = ; close(IN); # 最大記事数処理 while ($max <= @lines) { pop(@lines); } # ログ更新処理 unshift (@lines,"$date<>$DAT{'nm'}<>$DAT{'camp'}<>$com<>$DAT{'sogo'}<>$addr<>$host<>$agent<>\n"); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @lines; close(OUT); # ロック解除 if (-e $lockfile) { unlink($lockfile); } } #------------------------------------------------------------------------------- # 在室者処理 sub member { open(IN,"$memfile") || &error("Open Error : $memfile"); @data = ; close(IN); $member=""; @new=(); $flag=0; $flag2=0; foreach (@data) { ($time2,$name2,$host2) = split(/<>/); # 発言のない者は削除 if ($time-$reload_limit > $time2) { next; } elsif ($host2 eq "$addr") { # 발언/갱신 간격 # &error("$reload_mn秒以上間隔を空けて発言してください。") if($reload_mn+$time2>$time); if($reload_mn+$time2>$time){ print "Status: 204\n\n"; exit; } # 退室者は削除 if ($_[0] eq 'bye') { next; } # ホスト名が同一であれば時間と名前を更新 $_ = "$time<>$DAT{'nm'}<>$addr<>\n"; $name2 = $DAT{'nm'}; $flag=1; } # 更新用配列 @new に追加 if ($name2 ne "$host2") { push(@new,$_); # 参加者表示用文字列を作成 if(!$flag2){$member .="$name2◇";$flag2=1;} else{$member .="$name2◆";$flag2=0;} } } # 新規参加者を追加 if (!$flag && $mv_mode eq 'pc') { if ($DAT{'nm'} ne "$host") { push(@new,"$time<>$DAT{'nm'}<>$addr<>\n"); $member .= (!$flag2) ? "$DAT{'nm'} [IN]◇" : "$DAT{'nm'} [IN]◆"; } } # 参加者数を認識 $num = @new; # ファイル更新 open(OUT,">$memfile") || &error("Write Error : $memfile"); eval "flock(OUT,2);"; truncate(OUT,0); seek(OUT,0,0); print OUT @new; close(OUT); } #------------------------------------------------------------------------------- # HTMLのヘッダー sub header { print "Content-type: text/html; charset=UTF-8\n\n"; print <<"EOM"; $title EOM if($mv_mode eq 'pc'){ print <<"EOM"; $css EOM } (!$_[0] && $mv_mode eq 'pc') ? print qq|\n| : print "\n" ; }