#! /usr/local/bin/perl # #ゆいちゃっとMini1.0(chat.cgi) # require './jcodeLE.pl'; $| = 1; &init; &decode; &jikan; &write if ($chat); &html;exit; sub init{ #初期設定など $chat_file = './chat.dat'; #チャットログ(ファイル名はなるべく変更しておくこと。) $method = 'GET';#やっぱり、GETよねぇ〜 $title = 'ゆいちゃっとMini1.0(伝言板仕様)'; $body=''; $max = 50;#ログの最大行数 $host = $ENV{'REMOTE_HOST'};if($host=~/bmc/){$host="ppp753.master.ad.jp";} ####アクセス制限を使用するなら、#を消す。 #$kill_file = './kill.dat';#アクセス制限用 #open(DB,"$kill_file") || die "Cannot Open Log File $kill_file: $!"; # @lines2 = ; close(DB); #foreach $line (@lines2) { # next if(length($line)<4); chop $line; # if( $host=~/$line/ ){ print "Status: 204\n\n"; exit; } #} ####アクセス制限ここまで }#init END sub html { print "Content-type: text/html\n\n"; print <<"_HTML_"; $title $body
$title
おなまえ:
発言:
タグ有効:
_HTML_ #ログ表示 &readlog if(!@lines); print "@lines\n"; print "
ゆいちゃっと Mini(Free)
\n";#この行だけは消さないでっ!! }#html END sub write { $chat =~ s/\t/</g if($FORM{'tag'} ne 'on'); &tag if ($chat=~s/\t/= 0 ); } $chat = ''; } if ($chat) { $value = "${name} > $chat ($date $host)
\n"; }else{$value='';} &writelog; }#write END sub tag{ #このタグ閉じは、正しく閉じてある場合も余分に閉じます。(苦笑) $chat =~ s/
]*)>(.*)/$1/;
		$tag =~s/^\/(.*)//;
		$tag =~s/^([^\s]*).*/$1/;
	} 
	$chat.='>' if($chat=~/<\/$/);	
	@tags = reverse( @tags );
	foreach $tag ( @tags ){
		next if($tag =~/(img|^hr$|^br$)/i);
		$chat.="" if($tag);
	}
	$chat.='">タグえらー?' if( ($chat=~/.*<\/A>/i) );
	$chat =~ s//g;
		$FORM{$name} = $value;
	}
$name = $FORM{'user'};	$name =~ s/ //g; $name =~ s/ //g;
$name =~ s/\t/</g;	&getcookie if (${name} eq '');
&setcookie;
$chat = $FORM{'chat'};
}#decode END

sub jikan{#$dateに時刻を代入します。
	$times = time;#18時間時差があるなら、$times = time+18*60*60とする。
	($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($times);
	$min = "0$min" if ($min < 10);	$month++;
	$youbi = ('日','月','火','水','木','金','土') [$wday];
	$date = "$month/$mday($youbi)$hour:$min";
}#jikan END

sub readlog{	#配列@linesにログを読み込む
	open(DB,"$chat_file") || &ended();
		seek(DB,0,0);  @lines = ;   close(DB);
}#readlog END

sub writelog{	#$valueを@linesに加えたのち、書き込む
	(@lines < $max-1) || (@lines = @lines[0 .. $max - 2]);
	unshift( @lines,$value);
	open(DB,">$chat_file") || &ended();
		eval 'flock(DB,2);';
		seek(DB,0,0);	print DB @lines;
		eval 'flock(DB,8);';
	close(DB);
}#writelog END
sub getcookie{	#くっきーを頂きます。
	$cooks = $ENV{'HTTP_COOKIE'};
	$cooks = '' unless($cooks =~s/.*yuiminidata=(.*)yuiminiend.*/$1/);
	($name,$dmy) = split(/\t/, $cooks);
}#getcookie END

sub setcookie{	#くっきーをブラウザにプレゼントします。
	local($dmy,$mdc,$monc,$yrc,$wdayc,$mc,$yc);
	($dmy,$dmy,$dmy,$mdc,$monc,$yrc,$wdayc,$dmy,$dmy) = localtime(time + 7776000);
	$yc = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wdayc];
	$mc = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') [$monc];
	$yrc = $yrc+1900;	$mdc = "0$mdc" if ($mdc < 10);
	$data = "${name}\tyuiminiend";
	return if(index($ENV{'HTTP_COOKIE'},$data) >= 0);
	print "Set-Cookie: yuiminidata=$data; expires=$yc, $mdc-$mc-$yrc 00:00:00 GMT\n";
}#このクッキーはだいたい3ヶ月間有効です。
__END__