#! /usr/local/bin/perl
#
#==========================================================================================
#
# 多機能(?)掲示板システム 『SSBoard』ver 1.2 : ログファイル変換スクリプト
#
# Copyright Shinobu Suzuki 1998. All rights reserved.
#-----------------------------------------------------------------------------------------
# HomePage : http://www.aikis.or.jp/~s-suzuki/cgilabo/
# E-mail : s-suzuki@aikis.or.jp
#==========================================================================================
#
# 初期設定
#
$version = '1.21'; # 本スクリプトのバージョン
$bg_col = '#e0e0e0'; # 背景色
$title_col = '#000080'; # タイトルの色
$text_col = '#000000'; # テキストの色
$link_col = '#0000ff'; # リンクの色
$alink_col = '#ff0000'; # リンク中の色
$vlink_col = '#800080'; # 既リンクの色
#----------------------------------------------------------
# 変換するログファイルのデフォルト名
#----------------------------------------------------------
#
$log_name = "ssboard.log";
#----------------------------------------------------------
# CERN HTTPDなどのサーバーの場合で、ファイル関係のエラーが
# 出る場合、設置するディレクトリのフルパスを指定してみて下
# さい。なお、最後は / で終わること。
# $path = "/home/users/s-suzuki/public_html/bbs/";
#----------------------------------------------------------
#
$path = "";
#----------------------------------------------------------
# 日本語コード変換ライブラリの指定
#----------------------------------------------------------
#
require "$path"."jcode.pl";
#=========================================================================================
# これより、処理の開始
#=========================================================================================
&form; # フォームから入力されたデータを
if ( $FORM{'filename'} eq "" ) {
$FORM{'filename'} = "$log_name";
}
$data_name = "$path"."$FORM{'filename'}";
if ( -e $data_name ) {
&conv_data;
}
else {
print "Content-type: text/html\n\n";
print "\n";
print "
\n";
print "SSBoard v$version\n";
print "\n\n";
print "\n\n";
print "SSBoard v$version:ログデータの変換
\n";
print "
エラー発生:$FORM{'filename'}が見つかりません。
\n\n";
print "\n";
print "\n";
exit;
}
#=========================================================================================
# 処理はここまで
#=========================================================================================
sub conv_data {
if( !open( DB, "$data_name" )) {
print "Content-type: text/html\n\n";
print "\n";
print "\n";
print "SSBoard v$version\n";
print "\n\n";
print "\n\n";
print "SSBoard v$version:ログデータの変換
\n";
print "
エラー発生:$FORM{'filename'}がオープンできません。
\n\n";
print "\n";
print "\n";
exit;
}
@lines = ;
close(DB);
foreach $line (@lines) {
($count,$date,$editpwd,$name,$email,$url,$value,$subject,$rhost) = split(/\,/,$line);
if ( $rhost eq "" || $rhost eq "\n" ) {
($temp1, $host1) = split(//,$host1);
push( @new, "$count,$date,$editpwd,$name,$email,$url,$temp1,$subject,$host2,\n" );
}
else {
push( @new, "$count,$date,$editpwd,$name,$email,$url,$value,$subject,$rhost\n" );
}
}
if( !open( DB, ">$data_name" )) {
print "Content-type: text/html\n\n";
print "\n";
print "\n";
print "SSBoard v$version\n";
print "\n\n";
print "\n\n";
print "SSBoard v$version:ログデータの変換
\n";
print "
エラー発生:$FORM{'filename'}がオープンできません。
\n\n";
print "\n";
print "\n";
exit;
}
else {
print DB @new;
close(DB);
}
print "Content-type: text/html\n\n";
print "\n";
print "\n";
print "SSBoard v$version\n";
print "\n\n";
print "\n\n";
print "SSBoard v$version:ログデータの変換
\n";
print "
\n";
print "ログファイルの変換が終了しました。
\n\n";
print "\n";
print "\n";
exit;
}
#-----------------------------------------------------------------
# フォーム投稿されたデータを解析し、配列にリストする
#-----------------------------------------------------------------
#
sub form {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
#--------------------------------------------------
# $bufferに格納されたFORM形式のデータを取り出す
#--------------------------------------------------
@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;
#--------------------------------------------------
# 記録するデータの半角カナを全角カナに変換する
# これを利用するには、jcode.plのv2.0以降を使うこと
#--------------------------------------------------
&jcode'h2z_sjis(*value);
#--------------------------------------------------
# 記録するデータはsjisに統一する
#--------------------------------------------------
&jcode'convert(*value,'sjis');
}
}