WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:掲示板の設置

シンタロー[MAIL][URL][WriteDate : Fri Apr 7 14:21:24 2000]

掲示板を設置しようとしてアップしたら、
何度やっても『CGI Permission/Execute Error』というのが出てしまいます。
サーバーは一応CGIは使えるって表示もしてありますし、
なによりカウンタのSSIの方はしっかり動いてます。
何度もパーミッションの設定を指示どおりにやりましたが、うまくいきません。
どうしたら解消できるのかぜひ教えてください。
ちなみに私のサーバーは以下のURLです。

りく[MAIL][URL][WriteDate :Sat Apr 8 13:59:56 2000]

横から、なんなんですが・・・
設置しようとしているcgiのURLと、その今エラーが出ているcgiの
ソースも、見れるようにして質問したほうが・・・
それと転送モードも確認したのでしょうか?
多分、この質問の仕方だと、答えようがないと思います>想像でしか

シンタロー[MAIL][URL][WriteDate :Sat Apr 8 21:12:06 2000]

失礼しました、なにぶんまだ始めたばかりなので、説明が足りなかったようです。
というわけでちょっと長くなりましたが、CGIのソースを次ぎの書きこみに書かせていただきます。
ご注意していただきどうもありがとうございました。

シンタロー[MAIL][URL][WriteDate :Sat Apr 8 21:16:16 2000]

#!/usr/local/bin/perl

$ver = 'G-LIGHT v4.33'; # バージョン情報(修正不要)

require './jcode.pl'; # jcode.plが同一ディレクトリにある場合

## 基本設定
$pass = '0123'; # 管理用パスワード
$subject = 1; # 「題名」欄の有無 (0=no 1=yes)
$counter = 0; # ミニカウンタの有無 (0=no 1=テキスト 2=GIF画像)
$mini_fig = 5; # ミニカウンタの桁数
$cnt_color = "#DD0000"; # テキストのとき:ミニカウンタの色
$gif_url = "."; # GIFのとき :画像までのディレクトリ
$mini_w  = 8; #       〃     :画像の横サイズ
$mini_h  = 12; #       〃     :画像の縦サイズ
$cntfile = './count.dat'; # カウンタファイル
$tagkey  = 1; # タグの許可(0=no 1=yes)
$script  = './monobbs.cgi'; # スクリプトファイル名
$logfile = './monobbs.log'; # ログファイル名
$method  = 'POST'; # methodの形式(POST or GET)
$pagelog = 10; # 1ページ当たりの記事表示数
$lockkey = 2; # ファイルロック処理 (0=no 1=symlink 2=open)
$lockfile = 'glight.lock'; # ロックファイル名
$lock_dir = "."; # ロックファイルのディレクトリ
$wrap = 'soft'; # 投稿ファーム内の改行形式 (soft=改行なし hard=強制)
$autolink = 0; # URLの自動リンク (0=no 1=yes)
$mailing  = 0; # 自動メール通知の有無 (0=no 1=yes)
$sendmail = '/usr/lib/sendmail'; # sendmailパス(メール通知する時)
$mail_me = 0; # 自分の記事もメールする (0=no 1=yes)

## --- <画像関連> --------------------- #
$img_url = 'img'; # キャラクタGIF画像のディレクトリを指定

# キャラクタを指定(上下の配列はペアで)
@GFILE = ('icon-cat.gif','icon-dog.gif','icon-niwa.gif','icon-uma.gif','icon-usa.gif');
@CHARA = ('ねこ','いぬ','にわとり','うま','うさぎ');

# 管理者キャラクタを指定(上下の配列はペアで)
@ADMIN_GFILE = ('icon-chu.gif');
@ADMIN_CHARA = ('ねずみ');

## 設定ここまで

## ロックファイルを定義
$lockfile = "$lock_dir\/$lockfile";

## --- G-LIGHT のメイン処理
&form_decode;
if ($mode eq "usr_del") { &usr_del; }
elsif ($mode eq "regist") { ®ist; }
elsif ($mode eq "find") { &find; }
elsif ($mode eq 'past') { &past; }
elsif ($mode eq 'edit') { &edit; }
elsif ($mode eq 'edit_msg') { &edit_msg; }
elsif ($mode eq 'delete') { &delete; }
elsif ($mode eq 'del_msg') { &del_msg; }
elsif ($mode eq 'env') { &env; }
elsif ($mode eq 'env_init') { &env_init; }
elsif ($mode eq "enter") { &enter; }
elsif ($mode eq "image") { ℑ }

&html_log;

## --- HTMLのヘッダー
sub header{
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=x-sjis\">\n";
        print "<script LANGUAGE=\"JavaScript\">\n";
        print "<!--JavaScript\n";
        print "function wopen1(){Icon = window.open(\"icon.htm\",\"icon\",\"scrollbars=yes,toolbar=no,location=no,directories=no,resizable=no,status=no,menubar=no,width=500,height=500\");}\n";
        print "//end-->\n";
        print "</script>\n";
print "<title>$title</title>\n";
print "</head>\n";

if (!$bgc) {
print "<body bgcolor=\"#FFFFFF\" text=\"#808080\" link=\"#000000\" vlink=\"#000000\" alink=\"#C0C0C0\">\n";
} elsif ($bgr) {
print "<body background=\"$bgr\" bgcolor=$bgc text=$text link=$link vlink=$vlink alink=$alink>\n";

} else {
print "<body bgcolor=$bgc text=$text link=$link vlink=$vlink alink=$alink>\n";
}
}

## --- 記事表示部
sub html_log {
&get_cookie;

$agent = $ENV{'HTTP_USER_AGENT'};
# MSIE3 の場合フォームの長さを調整
if ($agent =~ /MSIE 3/i) {
$nam_wid = 30;
$com_wid = 70;
$url_wid = 48;
$sub_wid = 65;
# MSIE4 の場合フォームの長さを調整
} elsif ($agent =~ /MSIE 4/i) {
$nam_wid = 30;
$com_wid = 70;
$url_wid = 45;
$sub_wid = 65;
} else {
$nam_wid = 30;
$com_wid = 60;
$url_wid = 35;
$sub_wid = 45;
}

# ログを読みこみ
&open_log2;

# 環境設定部を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);

# ログチェック
unless ($init =~ /^GLIGHT/) { &log_err; }

&header;

# カウンタ処理
if ($counter) { &counter; }

        print "<div align=\"center\"><center>\n";

if ($timg) {
print "<p align=\"center\"><img src=\"$timg\" width=\"$timg_w\" height=\"$timg_h\" alt=\"$timg_a\"></p>\n";

} else {
print "<p align=\"center\"><font color=\"$t_color\" size=\"$t_size\" face=\"$t_face\"><b>$title</b></font></p>\n";
}

print "<p> </p>\n";
print "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\">\n";
print "<tr>\n";
print "<td><div align=\"center\"><center><table border=\"0\" cellspacing=\"0\">\n";
print "<form method=\"$method\" action=\"$script\">\n";
print "<input type=hidden name=mode value=\"regist\">\n";
print "<tr>\n";
print "<td align=\"right\" checked=\"false\" nowrap valign=\"middle\"><font color=\"$q_color\" face=\"$q_face\">Name : </font></td><td align=\"left\" checked=\"false\" nowrap valign=\"middle\"><input type=text name=name size=\"$nam_wid\" value=\"$c_name\"></td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td align=\"right\" checked=\"false\" nowrap valign=\"middle\"><font color=\"$q_color\" face=\"$q_face\">Mail : </font></td><td align=\"left\" checked=\"false\" nowrap valign=\"middle\"><input type=text name=email size=\"$nam_wid\" value=\"$c_email\"></td>\n";
print "</tr>\n";
print "<tr>\n";
print "<td align=\"right\" checked=\"false\" nowrap valign=\"middle\"><font color=\"$q_color\" face=\"$q_face\">HomePage : </font></td><td align=\"left\" checked=\"false\" nowrap valign=\"middle\"><input type=text size=$url_wid name=url value=\"http://$c_url\"></td>\n";
print "</tr>\n";
print "<tr>\n";

# 題名部
if ($subject) {
print "<td align=\"right\" nowrap valign=\"middle\"><font color=\"$q_color\" face=\"$q_face\">Title : </font></td><td align=\"left\" checked=\"false\" nowrap valign=\"middle\"><input type=text name=subj size=$sub_wid></td>\n";
}

print "</tr>\n";
print "<tr>\n";
print "<td align=\"right\" nowrap valign=\"middle\"><font color=\"$q_color\" face=\"$q_face\">Character : </font></td><td align=\"left\" checked=\"false\" nowrap valign=\"middle\"><select name=icon>\n";
foreach (0 .. $#GFILE) {
if ($c_icon eq "$GFILE[$_]") {
print "<option value=\"$GFILE[$_]\" selected>$CHARA[$_]\n";
} else {
print "<option value=\"$GFILE[$_]\">$CHARA[$_]\n";
}
}

print <<"HTML";
    </select> <a href="javascript:wopen1();"><img src="$img_url\/message-list.gif" width="49" height="14" align="absmiddle" alt="IMAGE LIST" border="0"></a>
  </td>
</tr>
<tr>
  <td valign="middle" align="center" colspan="2"><br>
    <textarea cols="$com_wid" rows=5 name=comment wrap="$wrap"></textarea>
  </td>
</tr>
<tr>
  <td valign="middle" align="right" colspan="2">
    <font color="$q_color" face="$q_face" size="1">Delete key</font> <input type=password name=pwd size=8 maxlength=8 value="$c_pwd">
  </td>
</tr>
<tr>
  <td valign="middle" align="center" colspan="2">
    <input type=submit value="        WRITE        " style="font-family: Trebuchet MS"> 
    <input type=reset value="REWRITE" style="font-family: Trebuchet MS">
  </td>
</tr>
</form>
</table>
</center></div>

<p align="center">
[ <a href="$home"><font face="$q_face">HOME</font></a> ] [ <a href=\"$script?mode=find\"><font face="$q_face">SEARCH</font></a> ]</p>

<p align="right"><a href="$script?mode=enter"><img src="$img_url\/message-master.gif" width="58" height="9" alt="MASTER" border="0"></a></p>

<div align="center"><center>
<table border="0" cellspacing="0" cellpadding="3">
<tr>
<td><font size="1" color="$q_color">・投稿時には、この記事を削除する時に利用するDelete keyを設定してください。一度設定して投稿すれば一定期間同じDelete keyが保存されます。<br>
・記事削除は、記事No.を入力し、投稿時に設定したDelete keyを下の欄に入力して[DELETE]ボタンを押します。<br>
・タグを使用出来ますが、他人の迷惑になるようなタグの乱用はご遠慮下さい。<br>
・常識に反した書き込み、また商用(金銭が絡む内容)の書き込みは、管理者により予\告無く削除されることがあります。</font></td>
</tr>
</table>
</center></div>
<br><br>
HTML

if ($FORM{'page'} eq '') { $page = 0; } 
else { $page = $FORM{'page'}; }

# 記事数を取得
$end_data = @lines - 1;
$page_end = $page + ($pagelog - 1);

if ($page_end >= $end_data) { $page_end = $end_data; }
foreach ($page .. $page_end) {
($no,$date,$name,$email,$local,$icon,$ad_ico,
$com,$res,$url,$host,$pw,$sub) = split(/<>/,$lines[$_]);

# 自動URLリンク
if ($autolink) { &auto_link($com); }
# Eメールをリンク
if ($email) { $name="<a href=\"mailto:$email\"> $name</a></td></tr>\n"; }

print "<hr size=\"1\" noshade width=\"650\">\n";
print "<div align=\"center\"><center>\n";
print "<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\">\n";
print "<tr><td align=\"left\" vlign=\"middle\" valign=\"middle\" checked=\"false\" bgcolor=\"$mt_color\"><font color=$subj_color>[ <font face=\"MS Sans Serif\">$no</font> ]</font>\n";

if ($subject == 1) {
  if ($sub eq "") { $sub = "no title"; }
  print " <font color=$subj_color size=\"4\"><b>$sub</b></font>\n";
  print " <font color=$subj_color face=\"Trebuchet MS\">Written by</font> <font color=$subj_color>$name</font></td></tr>\n\n";
  print "<tr><td align=\"right\" vlign=\"middle\" bgcolor=\"$mm_color\"><font face=\"Trebuchet MS\">Date : $date</font> <font face=\"Trebuchet MS\" size=\"2\">[ $host ]</font>\n";

} else {
  print " <font face=\"Trebuchet MS\">Written by</font> $name</td></tr>\n";
  print "<tr><td align=\"right\" vlign=\"middle\" bgcolor=\"$mm_color\"><font face=\"Trebuchet MS\">Date : $date</font> <font face=\"Trebuchet MS\" size=\"2\">[ $host ]</font>\n";
}

if ($url) {
  print "<br><a href=\"http://$url\" target=\"_top\"><img src=\"$limg\" width=\"$limg_w\" height=\"$limg_h\" alt=\"$limg_a\" border=\"0\"></a><br><br></td>";
} else {
  print "<br><br></td>\n";
}

print "</tr></table>\n";
print "<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n";
print "<tr>\n";
print "<td bgcolor=\"$mm_color\"><img src=\"$img_url/$icon\" hspace=\"5\"></td>\n";
print "<td align=\"left\" width=\"100%\" bgcolor=\"$mm_color\"><blockquote>$com</blockquote></td>\n";
print "</tr>\n";
print "</table>\n";

if ($res) {
  print "<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
  print "<tr><td bgcolor=\"$mm_color\">\n";
  print "<div align=\"right\"><table width=\"550\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr>\n";
  print "<td><img src=\"$img_url/$ad_ico\" hspace=\"2\"></td>\n";
  print "<td align=\"left\" width=\"100%\"><blockquote><font color=$mgr_color>$res<br>\n";
  print "[ <font face=\"Trebuchet MS\">From $manager</font> ]</blockquote></td>\n";
  print "</tr></table></div>\n";
  print "</td></tr>\n";
  print "</table>\n";
}
print "</center></div>\n";
print "<hr size=\"1\" noshade width=\"650\">\n";
}

# 改頁処理
print "<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\"><tr>\n";
$next_line = $page_end + 1;

if ($page_end ne $end_data) {
  print "<td valign=\"middle\"><form method=$method action=$script>\n";
  print "<input type=hidden name=page value=\"$next_line\">\n";
  print "<input type=submit value=\"READ OLD ENTRIES\" style=\"font-family: Trebuchet MS\">\n";
  print "</form></td>\n";
}

# 削除フォーム
print "<td valign=\"middle\">\n";
print "<form acion=\"$script\" method=$method>\n";
print "<input type=hidden name=mode value=\"usr_del\">\n";
print "<font color=\"$q_color\" face=\"$q_face\" size=\"2\">No.</font> <input type=text name=usr_no size=4>\n";
print "<font color=\"$q_color\" face=\"$q_face\" size=\"2\">Key</font> <input type=password name=usr_key size=6>\n";
print "<input type=submit value=\"DELETE\" style=\"font-family: Trebuchet MS\">\n";
print "</form></td></tr></table></td></table>\n";

## 著作権を表示(削除禁止)
print "<p align=\"right\">\n";
print "<!-- $ver -->\n";
print "<font face=\"Trebuchet MS\">Presented  by <a href=\"http://www.kent-web.com/\" target=_top>G-LIGHT</a> & <a href=\"http://home3.highway.ne.jp/see-ya/\" target=_top>Monochro BBS</a></font>\n";
print "</p>\n";
print "</body></html>\n";
exit;
}

シンタロー[MAIL][URL][WriteDate :Sat Apr 8 21:17:00 2000]

## --- ログ書き込み処理
sub regist {
# フォームチェック
if ($FORM{'name'} eq "") { &error("名前が入力されていません。",'NOLOCK'); }
if ($FORM{'comment'} eq "") { &error("コメントが入力されていません。",'NOLOCK'); }

# クッキーをブラウザに格納
&set_cookie;

# ロック開始
if ($lockkey == 1) { &lock1; }
elsif ($lockkey == 2) { &lock2; }

# ログを開く
&open_log1;

unless ($init =~ /^GLIGHT/) { &log_err; }

# 設定を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);

# 二重投稿の禁止
($knum,$kda,$kname,$kem,$klo,$ki,$kad,$kcom) = split(/<>/, $lines[0]);
if ($name eq $kname && $comment eq $kcom) { &error("二重投稿は禁止です"); }

## 過去ログを取得する場合
if ($pastkey && $#lines >= $max-1) { &pastlog; }

# 記事Noカウント及び最大記事数超を切り捨て
$number = $knum + 1;
if ($#lines >= $max-1) { splice(@lines,$max-1); }

# 削除キーを暗号化
if ($pwd) { &pass_ango("$pwd"); }

# ホスト名及び時間を取得
&get_host;
&get_time;

# ログをフォーマット
unshift(@lines,"$number<>$date<>$name<>$email<>$area<>$icon<><>$comment<><>$url<>$host<>$ango<>$subj<>\n");

unshift(@lines,$init);

# ログを更新
open(OUT,">$logfile") || &error("Can't write $logfile");
print OUT @lines;
close(OUT);

# ロック解除
if (-e $lockfile) { unlink($lockfile); }

# メール処理
if ($mailto && $mail_me) { &mail_to; }
elsif ($mailto && $mail_me == 0 && $email ne "$mailto") { &mail_to; }

# 記事表示部に戻る
&html_log;
}

## --- フォームからのデータ処理
sub form_decode {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます。",'NOLOCK'); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }

@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'convert(*value,'sjis');

# タグ処理
if ($tagkey == 0) {
$value =~ s/\"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;

} else {
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<>/<>/g;

}

# 削除情報
if ($name eq 'del') { push(@dels,$value); }

$FORM{$name} = $value;
}
$name = $FORM{'name'};
$comment = $FORM{'comment'};
$comment =~ s/\r\n/<br>/g;
$comment =~ s/\r|\n/<br>/g;
$FORM{'res_msg'} =~ s/\r\n/<br>/g;
$FORM{'res_msg'} =~ s/\r|\n/<br>/g;
$email = $FORM{'email'};
$url = $FORM{'url'};
$url =~ s/^http\:\/\///;
$mode = $FORM{'mode'};
$area = $FORM{'area'};
$icon = $FORM{'icon'};
$pwd  = $FORM{'pwd'};
$com  = $FORM{'com'};
$com =~ s/\r\n/<br>/g;
$com =~ s/\r|\n/<br>/g;
$res = $FORM{'res'};
$res =~ s/\r\n/<br>/g;
$res =~ s/\r|\n/<br>/g;
$subj = $FORM{'subj'};
}

## --- 日時の取得
sub get_time {
$ENV{'TZ'} = "JST-9";
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
$year = 1900 + $year;
$mon++;
if ($mon  < 10) { $mon  = "0$mon";  }
if ($mday < 10) { $mday = "0$mday"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($min  < 10) { $min  = "0$min";  }
$week = ('SUN','MON','TUE','WED','THU','FRI','SAT') [$wday];

# 日時のフォーマット
$date = "$year.$mon.$mday $week $hour\:$min";
}

## --- エラー表示処理
sub error {
if ($_[1] ne '0') { &header; }

if (-e $lockfile && $_[1] eq "") { unlink($lockfile); }

print "<p align=\"center\"> </p>\n";

print "<p align=\"center\"><font face=\"Trebuchet MS\" size=\"+2\" color=\"#000000\">ERROR !</font>\n";
print "<br><br><font face=\"Trebuchet MS\" color=\"#000000\">$_[0]</font></p>\n";

print "</body></html>\n";
exit;
}

## --- 記事削除処理
sub usr_del {
if ($FORM{'usr_no'} eq "" || $FORM{'usr_key'} eq "") {
&error("削除No又は削除キーが入力されていません。",'NOLOCK');
}

# ロック開始
if ($lockkey == 1) { &lock1; }
elsif ($lockkey == 2) { &lock2; }

# ログを読み込む
&open_log1;

@new = ();
$no_del = 0;

## 削除キーによる記事削除 ##
foreach $line (@lines) {
($number,$date,$name,$email,$local,$icon,$ad_icon,$com,
$res,$url,$host,$ango) = split(/<>/,$line);
$flag = 0;
if ($FORM{'usr_no'} eq "$number") {
if ($ango eq "") { $no_del = 1; last; }

# パスワード照合
&pass_shogo($FORM{'usr_key'});

if ($check eq "yes") { $flag = 1; }
else { $no_del = 2; last; }
}
if ($flag == 0) { push(@new,$line); }
}

if ($no_del == 1) { &error("削除キーが設定されていません。"); }
elsif ($no_del == 2) { &error("パスワードが違います。"); }

unshift(@new,$init);

# ログを更新
open(DB,">$logfile") || &error("Can't write $logfile");
print DB @new;
close(DB);

# ロック解除
if (-e $lockfile) { unlink($lockfile); }

# 初期画面にもどる
&html_log;
}

## --- ワード検索サブルーチン
sub find {
open(IN,"$logfile") || &error("Can't open $logfile",'NOLOCK');
@lines = <IN>;
close(IN);

($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $lines[0]);

&header;
print <<"EOM";
<p><a href="$script?">▲ <b><font face="Arial">BBS</font></b></a></p>
<div align="center"><center>
<table width="600">
  <tr>
    <th bgcolor="#000000"><font color="#C0C0C0" size="2">■</font><font color="#FFFFFF"> </font><font color="#FFFFFF" face="Arial">S E A R C H </font><font color="#C0C0C0" size="2">■</font></th>
  </tr>
</table>
</center></div>
<div align="center"><center>
<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td><br><br>
    検索したいキーワードを入力し、検索条件を選択し「<font face="Trebuchet MS">SEARCH</font>」を押してください。 <br>
    複数のキーワードを入力するときは、半角スペースで区切って下さい。 <br>
    <br><br></td>
  </tr>
</table>
</center></div>
EOM

if ($pastkey) {
print "<LI>過去ログは新着順に5ファイル毎に区切っています。\n";
}

print <<"EOM";
    </UL>
  </td>
</tr>
</table>
<div align=center><center>
<form action="$script" method="$method">
<input type=hidden name=mode value="find">
<p align=center><font face="Trebuchet MS">Keyword :</font> <input type=text name=word size=30><input type=radio name=cond value="and" checked><font face="Trebuchet MS">AND</font> <input type=radio name=cond value="or"><font  face="Trebuchet MS">OR</font></p>
EOM

# 過去ログ表示
if ($pastkey) {
print "<tr><td>検索領域</td>\n";
print "<td align=center>";
print "<input type=radio name=log value=\"0\" checked><B>現行ログ</B>\n";

open(NO,"$pastno") || &error("Can't open $pastno",'NOLOCK');
$no = <NO>;
close(NO);

$part = $no / 5;
$part = int($part+1);

$i=0;
$j=$part;
foreach (1 .. $part) {
$i++;
if ($i == 3) { print "<br>"; $i=0; }
print "<input type=radio name=log value=\"$j\">過去ログ$j\n";
$j--;
}

print "</td></tr>\n";

} else {
print "<input type=hidden name=log value=\"0\">\n";
}

print "<p align=\"center\"><input type=submit value=\"        SEARCH        \" style=\"font-family: Trebuchet MS\">";
print " <input type=reset value=\"RESET\" style=\"font-family: Trebuchet MS\"></th></tr>\n";
print "</p></form></center></div>\n";


# ワード検索の実行と結果表示
if ($FORM{'word'} ne "") {

# 入力内容を整理
$cond = $FORM{'cond'};
$word = $FORM{'word'};
$word =~ s/ / /g;
$word =~ s/\t/ /g;
@pairs = split(/ /,$word);

# 現行ログのとき
if ($FORM{'log'} == 0) {

# ファイルを読み込み
open(DB,"$logfile") || &error("Can't open $logfile",'NOLOCK');
@lines = <DB>;
close(DB);

shift(@lines);

# 過去ログのとき
} else {

# 検索領域を定義
$start = 5 * $FORM{'log'} - 4;

@lines = ();
foreach ($start .. $start+5) {
unless(-e "$past_dir\/$_\.html") { last; }

open(DB,"$past_dir\/$_\.html");
@temp = <DB>;
close(DB);

push(@lines,@temp);
}
}

# 検索処理
foreach $line (@lines) {
$flag = 0;
foreach $pair (@pairs){
if (index($line,$pair) >= 0) {
$flag = 1;
if ($cond eq 'or') { last; }
} else {
if ($cond eq 'and') { $flag = 0; last; }
}
}
if ($flag == 1) { push(@new,$line); }
}

# 検索終了
$count = @new;
print "<hr><b>検索結果:$count件</b>\n";
print "<P><OL>\n";

if ($FORM{'log'} == 0) {

  foreach $line (@new) {
($num,$date,$name,$email,$local,$icon,$ad_ico,$com,$res,$url,
$host,$pw,$sub) = split(/<>/,$line);

if ($subject && !$sub) { $sub = "no title"; }
if ($email) { $name = "<a href=mailto:$email>$name</a>"; }
if ($url) { $url = "<a href=http://$url target=_top>http://$url</a>"; }

# 結果を表示
print "<LI>[$num] <font color=$subj_color><b>$sub</b></font>\n";
print "投稿者:<b>$name</b> <small>投稿日:$date</small>\n";
print "<P><blockquote>$com<P>$url</blockquote><hr>\n";
  }

} else {

  foreach $line (@new) {
($p1,$p2) = split(/<\!--T-->/, $line);
print "<LI>$p1 \- $p2\n";
  }

}

}
print "</OL>\n";
print "</body></html>\n";
exit;
}

## --- メール送信
sub mail_to {
$mail_subj = "$title に投稿がありました。";

     &jcode'convert(*mail_subj,'jis');
     &jcode'convert(*name,'jis');
     &jcode'convert(*comment,'jis');
     if ($subj) { &jcode'convert(*subj,'jis'); }

$comment =~ s/<br>/\n/g;
$comment =~ s/</</g;
$comment =~ s/>/>/g;

if (open(MAIL,"| $sendmail $mailto")) {
print MAIL "X-Mailer: GLIGHT MAILER\n";
print MAIL "To: $mailto\n";

# メールアドレスがない場合はダミーメールに置き換え
if ($email eq "") { $email = "nomail\@xxx.xxx"; }

print MAIL "From: $email\n";
print MAIL "Subject: $mail_subj\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-type: text/plain\n\n";
print MAIL "$mail_subj\n";
print MAIL "--------------------------------------------------------\n";
print MAIL "TIME : $date\n";
print MAIL "HOST : $host\n";
print MAIL "NAME : $name\n";
print MAIL "EMAIL: $email\n";
if ($url)  { print MAIL "URL  : http://$url\n"; }
if ($subj) { print MAIL "TITLE: $subj\n"; }
print MAIL "$comment\n";
print MAIL "--------------------------------------------------------\n";
close(MAIL);
}
}


シンタロー[MAIL][URL][WriteDate :Sat Apr 8 21:17:40 2000]

## --- クッキーの発行
sub set_cookie {
($secg,$ming,$hourg,$mdayg,$mong,$yearg,
$wdayg,$ydayg,$isdstg) = gmtime(time + 90*24*60*60);

if ($yearg < 10) { $yearg = "0$yearg"; }
if ($secg  < 10) { $secg  = "0$secg";  }
if ($ming  < 10) { $ming  = "0$ming";  }
if ($hourg < 10) { $hourg = "0$hourg"; }
if ($mdayg < 10) { $mdayg = "0$mdayg"; }

$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul',
'Aug','Sep','Oct','Nov','Dec')[$mong];
$youbi = ('Sunday','Monday','Tuesday','Wednesday',
'Thursday','Friday','Saturday')[$wdayg];

$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
$cook="name\:$name\,email\:$email\,url\:$url\,pwd\:$pwd\,area\:$area\,icon\:$icon";
print "Set-Cookie: GLIGHT=$cook; expires=$date_gmt\n";
}

## --- クッキーを取得
sub get_cookie {
@pairs = split(/;/, $ENV{'HTTP_COOKIE'});
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/,/, $DUMMY{'GLIGHT'});
foreach $pair (@pairs) {
local($name, $value) = split(/:/, $pair);
$COOKIE{$name} = $value;
}
$c_name = $COOKIE{'name'};
$c_email= $COOKIE{'email'};
$c_url  = $COOKIE{'url'};
$c_pwd  = $COOKIE{'pwd'};
$c_area = $COOKIE{'area'};
$c_icon = $COOKIE{'icon'};

if ($FORM{'name'})  { $c_name  = $FORM{'name'}; }
if ($FORM{'email'}) { $c_email = $FORM{'email'}; }
if ($FORM{'url'})   { $c_url   = $url; }
if ($FORM{'pwd'})   { $c_pwd   = $FORM{'pwd'}; }
if ($FORM{'area'})  { $c_area  = $FORM{'area'}; }
if ($FORM{'icon'})  { $c_icon  = $FORM{'icon'}; }
}

## --- パスワード暗号処理
sub pass_ango {
$now = time;
($p1, $p2) = unpack("C2", $now);
$wk = $now / (60*60*24*7) + $p1 + $p2 - 8;
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[$wk % 64] . $saltset[$now % 64];
$ango = crypt($_[0], $nsalt);
}

## --- パスワード照合処理
sub pass_shogo {
if ($ango =~ /^\$1\$/) { $crptkey = 3; } # FreeBSDサーバ対応
else { $crptkey = 0; }

$check = "no";
if (crypt("$_[0]", substr($ango,$crptkey,2)) eq "$ango") { $check = "yes"; }
}

## --- ロックファイル(symlink関数)
sub lock1 { 
local($retry) = 5;
while (!symlink(".", $lockfile)) {
if (--$retry <= 0) { &error("LOCK is BUSY"); }
sleep(1);
}
}

## --- ロックファイル(open関数)
sub lock2 {
$lockflag = 0;
foreach (1 .. 5) {
unless (-e $lockfile) {
open(LOCK,">$lockfile");
close(LOCK);
$lockflag = 1;
last;
} else {
sleep(1);
}
}
if ($lockflag == 0) {
&error("LOCK is BUSY");
}
}

## --- カウンタ処理
sub counter {
# カウントファイルを読みこみ
open(NO,"$cntfile") || &error("Can't open $cntfile",'0');
$cnt = <NO>;
close(NO);

# 閲覧時のみカウントアップ
if ($FORM{'mode'} eq '') {
# カウントアップ
$cnt++;

# テンポラリーファイルを定義
$prono = "$$";
if ($prono eq "") {
srand;
$prono =  1000000000000000 * rand;
}
$cnt_temp = "$lock_dir\/$prono\.tmp";

# テンポラリーファイルを作成
open(TMP,">$cnt_temp") || &error("Can't create tempfile",'0');
print TMP $cnt;
close(TMP);

# パーミッションを666に
chmod (0666,"$cnt_temp");

# リネームする
rename($cnt_temp,$cntfile);

# もしテンポラリーファイルが残っていたら削除
if (-e $cnt_temp) { unlink($cnt_temp); }
}

# 桁数調整
while(length($cnt) < $mini_fig) { $cnt = '0' . "$cnt"; }
@cnts = split(//,$cnt);

print "<table border=0 align=left><tr><td>\n";

# GIFカウンタ表示
if ($counter == 2) {
foreach (0 .. $#cnts) {
print "<img src=\"$gif_url/$cnts[$_]\.gif\" alt=\"$cnts[$_]\" width=\"$mini_w\" height=\"$mini_h\">";
}

# テキストカウンタ表示
} else {
print "<font color=$cnt_color face=\"verdana,Times New Roman,Arial\">$cnt</font>";
}

print "</td></tr></table>\n";
}

## --- ホスト名を取得
sub get_host {
$host  = $ENV{'REMOTE_HOST'};
$addr  = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq "$addr") {
($p1,$p2,$p3,$p4) = split(/\./,$addr);
$temp = pack("C4",$p1,$p2,$p3,$p4);
$host = gethostbyaddr("$temp", 2);
if ($host eq "") { $host = $addr; }
}
}

## --- 自動リンク
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<a href=$2 target=_top>$2<\/a>/g;
}

## --- 過去ログ生成
sub pastlog {
$new_flag = 0;

open(NUM,"$pastno") || &error("Can't open $pastno");
$count = <NUM>;
close(NUM);

# 過去ログのファイル名を定義
$pastfile  = "$past_dir/$count\.html";

# 過去ログがない場合、新規に自動生成する
unless(-e $pastfile) { &new_log; }

if ($new_flag == 0) {
open (DB,"$pastfile") || &error("Can't open $pastfile");
@past = <DB>;
close(DB);
}

# 規定の行数をオーバーすると、次ファイルを自動生成する
if ($#past > $log_line) { &next_log; }

$pst_line = $lines[$max-1];
$pst_line =~ s/\n//g;

($pnum,$pdate,$pname,$pemail,$plocal,$picon,$pad_icon,
$pcom,$pres,$purl,$phost,$ppw,$psub) = split(/<>/, $pst_line);

if ($subject && $psub eq "") { $psub = "no title"; }
if ($pemail) { $pname = "<a href=\"mailto\:$pemail\">$pname</a>"; }
if ($purl) { $purl = "<a href=http://$purl target=_top>http://$purl</a>"; }

# 自動リンク
if ($autolink) { &auto_link($pcom); }

$html = <<"HTML";
[$pnum] <font color=$subj_color><b>$psub</b></font><!--T--> 投稿者:<font color=$link><b>$pname</b></font> <small>投稿日:$pdate</small><p><blockquote>$pcom<p>$purl</blockquote><!--$phost--><hr>
HTML

@news = ();
foreach $line (@past) {
if ($line =~ /<!--OWARI-->/i) { last; }
push (@news,$line);
if ($line =~ /<!--HAJIME-->/i) { push (@news,"$html"); }
}

push (@news,"<!--OWARI-->\n</body></html>\n");

open(DB,">$pastfile") || &error("Can't write $pastfile");
print DB @news;
close(DB);

}## --- 過去ログ完了 --- ##

## --- 過去ログ次ファイル生成ルーチン
sub next_log {
# 次ファイルのためのカウントアップ
$count++;

# カウントファイル更新
open(NUM,">$pastno") || &error("Can't write $pastno");
print NUM "$count";
close(NUM);

$pastfile  = "$past_dir/$count\.html";

&new_log;
}

## --- 新規過去ログファイル生成ルーチン
sub new_log {
$new_flag = 1;

$past[0] = "<html><head><title>過去ログ</title></head>\n";
$past[1] = "<body background=\"$bgr\" bgcolor=$bgc text=$text link=$link vlink=$vlink alink=$alink><hr>\n";
$past[2] = "<!--HAJIME-->\n";
$past[3] = "<!--OWARI-->\n";
$past[4] = "</body></html>\n";

# 新規過去ログファイルを生成更新
open(DB,">$pastfile") || &error("Can't write $pastfile");
print DB @past;
close(DB);

# パーミッションを666へ。
chmod(0666,"$pastfile");
}

## --- ログエラー
sub log_err {
&open_log2;

# 設定を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);

&header;
print "<div align=\"center\"><center>\n";
print "<table width=\"600\"><tr>\n";
print "<th bgcolor=\"#000000\"><font color=\"#C0C0C0\" size=\"2\">■</font><font color=\"#FFFFFF\"> </font><font color=\"#FFFFFF\" face=\"Arial\">A D M I N I S T R A T I O N </font><font color=\"#C0C0C0\" size=\"2\">■</font></th>\n";
print "</tr></table>\n";
print "</center></div>\n";

if ($lines[0] eq "") {
print "<p align=\"center\">ログ容量が0です。ただ今から環境設定を行います。</p>\n";

} else {
print "<p align=\"center\">ログフォーマットが v4.xx の形式ではありません。<br>\n";
print "ただ今からログフォーマットを変換し、WEB上から環境設定を行います。</font></p>\n";
}

print "<div align=\"center\"><center>\n";
print "<form action=\"$script\" method=$method>\n";
print "<input type=hidden name=mode value=\"env\">\n";
print "<font face=\"Trebuchet MS\">PassWord :</font> <input type=password name=pass size=8></p>";
print "<p><input type=\"submit\" value=\"      ATTESTATION      \" style=\"font-family: Trebuchet MS\"></p>\n";
print "</center></div>\n";
print "</form>\n";
print "</body></html>\n";
exit;
}

## --- ログ編集モード入室処理
sub enter {
&open_log2;

# 設定を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);

&header;
print "<div align=\"center\"><center>\n";
print "<table width=\"600\"><tr>\n";
print "<th bgcolor=\"#000000\"><font color=\"#C0C0C0\" size=\"2\">■</font><font color=\"#FFFFFF\"> </font><font color=\"#FFFFFF\" face=\"Arial\">A D M I N I S T R A T I O N </font><font color=\"#C0C0C0\" size=\"2\">■</font></th>\n";
print "</tr></table>\n";
print "</center></div>\n";
print "<p align=\"center\">処理オプションを選択し、パスワードを入力して下さい。</p>\n";
print "<form action=\"$script\" method=$method>\n";
print "<div align=\"center\"><center>\n";
print "<p><input type=radio name=mode value=\"edit\" checked>記事編集\n";
print "<input type=radio name=mode value=\"delete\">記事削除\n";
print "<input type=radio name=mode value=\"env\">環境設定<br><br>\n";
print "<font face=\"Trebuchet MS\">PassWord :</font> <input type=password name=pass size=8></p>";
print "</center></div>\n";
print "<div align=\"center\"><center>\n";
print "<p><input type=\"submit\" value=\"      ATTESTATION      \" style=\"font-family: Trebuchet MS\"></p>\n";
print "</center></div>\n";
print "</form>\n";
print "</body></html>\n";
exit;
}

## --- ログ削除画面
sub delete {
# パスワード認証
if ($pass ne "$FORM{'pass'}") { &error("パスワードが違います。",'NOLOCK'); }

&open_log2;

# 設定を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);

&header;
print "<p><a href=\"$script?\">▲ <b><font face=\"Arial\">BBS</font></b></a></p>\n";
print "<div align=\"center\"><center>\n";
print "<table width=\"600\"><tr>\n";
print "<th bgcolor=\"#000000\"><font color=\"#C0C0C0\" size=\"2\">■</font> <font color=\"#FFFFFF\" face=\"Arial\">A D M I N I S T R A T I O N </font><font color=\"#C0C0C0\" size=\"2\">■</font></th>\n";
print "<table width=\"600\" cellspacing=\"1\" cellpadding=\"2\"><tr>\n";
print "</tr></table>\n";
print "</center></div>\n";
print "<p align=\"center\">削除する記事をチェックして削除ボタンを押して下さい。</p>\n";
print "<form action=\"$script\" method=$method>\n";
print "<input type=hidden name=mode value=\"del_msg\">\n";
print "<input type=hidden name=pass value=\"$FORM{'pass'}\">\n";
print "<div align=\"center\"><center>\n";
print "<table border=\"0\" width=\"600\" cellspacing=\"1\" cellpadding=\"2\"><tr>\n";
print "<th valign=\"middle\" align=\"left\" width=\"25\"></th>\n";
print "<th valign=\"middle\" align=\"left\" width=\"25\"></th>\n";

if ($subject) { print "<th valign=\"middle\" align=\"left\" width=\"100\"><font size=\"2\">■</font> <font face=\"Trebuchet MS\">Title</font></th>\n"; }

print "<th valign=\"middle\" align=\"left\" width=\"100\"><font size=\"2\">■</font> <font face=\"Trebuchet MS\">Name</font></th>\n";
print "<th valign=\"middle\" align=\"left\" width=\"350\"><font size=\"2\">■</font> <font face=\"Trebuchet MS\">Message</font></th></tr>\n";

foreach $line (@lines) {
($num,$date,$name,$email,$local,$icon,$ad_ico,$com,$res,
$url,$host,$pw,$sub) = split(/<>/, $line);

if (length($com) > 60) { $com=substr($com,0,58); $com=$com . '..'; }
$com =~ s/<br>/ /g;
$com =~ s/</</g;
$com =~ s/>/>/g;

if ($email) { $name = "<a href=mailto:$email>$name</a>"; }
if ($sub eq "") { $sub = "no title"; }

print "<tr><td checked=\"false\" align=\"center\" width=\"25\" bgcolor=\"$mm_color\"><input type=checkbox name=del value=\"$num\"></th>";
print "<th checked=\"false\" align=\"center\" width=\"25\"><font face=\"Trebuchet MS\">$num</font></th>\n";

if ($subject) { print "<td align=\"left\" width=\"100\" bgcolor=\"$mm_color\">$sub</td>"; }

print "<td checked=\"false\" width=\"100\">$name</td>";
print "<td checked=\"false\" width=\"350\" bgcolor=\"$mm_color\"><small>$com</small></td>\n";
}

print "</tr></table>";
print "</center></div>";
print "<div align=\"center\"><center>";
print "<p><input type=\"submit\" value=\"        EXECTION        \" style=\"font-family: Trebuchet MS\"> <input type=\"reset\" value=\"RESET\" style=\"font-family: Trebuchet MS\"></p>";
print "</center></div>";
print "</form>\n";
print "</body></html>\n";
exit;
}

## --- 削除処理
sub del_msg {
# パスワード認証
if ($pass ne "$FORM{'pass'}") { &error("パスワードが違います。",'NOLOCK'); }

# ロック開始
if ($lockkey == 1) { &lock1; }
elsif ($lockkey == 2) { &lock2; }

&open_log1;

@new=();
foreach $line (@lines) {
($num,$date,$name,$email,$local,$icon,$ad_ico,$msg,$rmsg,
$hp,$host,$pw,$sub) = split(/<>/, $line);
$flag=0;
foreach $chk (@dels) {
if ($chk eq "$num") { $flag=1; next; }
}
if ($flag == 0) { push(@new,$line); }
}

unshift(@new,$init);

open(OUT,">$logfile") || &error("Can't write $logfile");
print OUT @new;
close(OUT);

unlink($lockfile) if (-e $lockfile);

# 初期画面に戻る
&delete;
}

## --- 編集画面
sub edit {
# パスワードチェック
if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います。",'NOLOCK'); }

&open_log2;

# 設定を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);


&header;
print "<p><a href=\"$script?\">▲ <b><font face=\"Arial\">BBS</font></b></a></p>\n";
print "<div align=\"center\"><center>\n";
print "<table width=\"600\"><tr>\n";
print "<th bgcolor=\"#000000\"><font color=\"#C0C0C0\" size=\"2\">■</font> <font color=\"#FFFFFF\" face=\"Arial\">A D M I N I S T R A T I O N </font><font color=\"#C0C0C0\" size=\"2\">■</font></th>\n";
print "</tr></table>\n";
print "</center></div>\n";
print "<div align=\"center\"><center>\n";
print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>\n";
print "<td><br><br>返信レスは、「管理人レス」の部分に記述し編集ボタンを押して下さい。<br>記事の内容を修正する場合は、変更する個所のみ修正し編集ボタンを押して下さい。<br><br><br></td>\n";
print "</tr></table>\n";
print "</center></div>\n";
print "<hr align=\"center\" noshade>\n";

# 改頁処理
if ($FORM{'page'} eq '') { $page = 0; } 
else { $page = $FORM{'page'}; }

# 記事数を取得
$end_data = @lines - 1;
$page_end = $page + ($pagelog - 1);

if ($page_end >= $end_data) { $page_end = $end_data; }
foreach ($page .. $page_end) {
($number,$date,$name,$email,$local,$icon,$ad_icon,
$com,$res,$url,$host,$pw,$sub) = split(/<>/, $lines[$_]);

$com =~ s/<br>/\r/g;
$res =~ s/<br>/\r/g;

print "<form action=\"$script\" method=$method>\n";
print "<input type=hidden name=mode value=\"edit_msg\">\n";
print "<input type=hidden name=no value=\"$number\">\n";
print "<input type=hidden name=pass value=\"$FORM{'pass'}\">\n";
print "<div align=\"center\"><center>\n";
print "<table BORDER=\"0\" width=\"600\"><tr><td VALIGN=\"top\">\n";
print "<table border=\"0\" align=\"left\" width=\"375\">\n";
print "<tr><th align=\"left\" nowrap colspan=\"2\"><font face=\"Trebuchet MS\" color=\"#000000\">$number</font></th></tr>\n";
print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">Date : </font></td><td nowrap><font face=\"Trebuchet MS\">$date</font></td></tr>\n";
print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">Name : </font></td><td nowrap><input type=text name=name size=25 value=\"$name\"></td></tr>\n";
print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">Mail : </font></td><td nowrap><input type=text name=email size=25 value=\"$email\"></td></tr>\n";

# タイトル部表示
if ($subject) {
   print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">Title : </font></td><td nowrap><input type=text name=sub size=25 value=\"$sub\"></td></tr>\n";
}

print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">HomePage : </font></td><td nowrap><input type=text name=url size=35 value=\"http://$url\"></td></tr>\n";
print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">Host : </font></td><td nowrap><font face=\"Trebuchet MS\">$host</font></td></tr>\n";
print "<tr><td align=\"right\" nowrap><font face=\"Trebuchet MS\">Image : </font></td><td nowrap><img src=\"$img_url/$icon\"></td></tr>\n";
print "</table>\n";
print "</td>\n";
print "<td VALIGN=\"top\" width=\"100%\"><table border=\"0\">\n";
print "<tr><td nowrap><font face=\"Trebuchet MS\">Message :</font><br><textarea name=com cols=50 rows=5>$com</textarea></td></tr>\n";
print "<tr><td nowrap><font face=\"Trebuchet MS\">Reply :</font><br><textarea name=res cols=50 rows=5 wrap=\"$wrap\">$res</textarea></td></tr>\n";
print "<tr><td nowrap><font face=\"Trebuchet MS\">Image :</font> <select name=ad_icon>\n";

# 管理者用画像
foreach (0 .. $#ADMIN_GFILE) {
if ($ad_icon eq "$ADMIN_GFILE[$_]") {
print "<option value=\"$ADMIN_GFILE[$_]\" selected>$ADMIN_CHARA[$_]\n";
} else {
print "<option value=\"$ADMIN_GFILE[$_]\">$ADMIN_CHARA[$_]\n";
}
}

print "</select></td></tr>\n";
print "<tr><td nowrap><input type=\"submit\" value=\"        EDITING        \" style=\"font-family: Trebuchet MS\"> <input type=\"reset\" value=\"RESET\" style=\"font-family: Trebuchet MS\"></td></tr>\n";
print "</table></td>\n";
print "</tr></table></form>\n";
print "</center></div>\n";
print "<hr align=\"center\" noshade>\n";
}

# 改頁処理
$next_line = $page_end + 1;
if ($page_end ne $end_data) {
print "<table><td><form method=$method action=\"$script\">\n";
print "<input type=hidden name=page value=\"$next_line\">\n";
print "<input type=hidden name=mode value=\"edit\">\n";
print "<input type=hidden name=pass value=\"$FORM{'pass'}\">\n";
print "<input type=submit value=\"次の$pagelog件を表\示\">\n";
print "</form></td></table>\n";
}
print "</body></html>\n";
exit;
}

## --- 編集実行処理
sub edit_msg {
# パスワード認証
if ($pass ne "$FORM{'pass'}") { &error("パスワードが違います。",'NOLOCK'); }

# ロック開始
if ($lockkey == 1) { &lock1; }
elsif ($lockkey == 2) { &lock2; }

# ログ読みこみ
&open_log1;

@new=();
foreach $line (@lines) {
($num,$date,$name,$email,$local,$icon,$ad_ico,
$msg,$rmsg,$hp,$host,$pw,$sub) = split(/<>/, $line);

if ($FORM{'no'} eq "$num") {
$line = "$num<>$date<>$FORM{'name'}<>$FORM{'email'}<>$local<>$icon<>$FORM{'ad_icon'}<>$com<>$res<>$url<>$host<>$pw<>$FORM{'sub'}<>\n";
}

push(@new,$line);
}

unshift(@new,$init);

open(DB,">$logfile") || &error("Can't write $logfile");
print DB @new;
close(DB);

unlink($lockfile) if (-e $lockfile);

&edit;
}


シンタロー[MAIL][URL][WriteDate :Sat Apr 8 21:18:13 2000]

## --- 環境設定画面
sub env {
# パスワード認証
if ($pass ne "$FORM{'pass'}") { &error("パスワードが違います。",'NOLOCK'); }

open(IN,"$logfile") || &error("Can't open $logfile",'NOLOCK');
@lines = <IN>;
close(IN);

if ($lines[0] =~ /^GLIGHT/) {
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $lines[0]);

} else {
$title="MESSAGE BOARD"; $t_color="000000"; $t_size=6; $t_face="Trebuchet MS";
$bgc="FFFFFF"; $text="808080"; $link="000000"; $vlink="000000"; $alink="COCOCO";
$q_color="000000"; $q_face="Trebuchet MS"; $mt_color="000000"; $mm_color="FFFFFF";
$limg="img/message-home.gif"; $limg_h="11"; $limg_w="34"; $limg_a="HOME";
$home="../index.html"; $max=50; $subj_color="FFFFFF";
$manager="管理人"; $mgr_color="800000";
}

&header;

print <<"EOF";
<p><a href="$script?">▲ <b><font face="Arial">BBS</font></b></a></p>
<div align="center"><center>
<table width="600">
  <tr>
    <th bgcolor="#000000"><font color="#C0C0C0" size="2">■</font><font color="#FFFFFF"> </font><font color="#FFFFFF" face="Arial">A D M I N I S T R A T I O N </font><font color="#C0C0C0" size="2">■</font></th>
  </tr>
</table>
</center></div>
<blockquote>
<div align="center"><center>
<table border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td><br><br>
    環境設定の修正を行います。 <br>
    変更したい個所を修正し、送信キーを押してください。 <br>
    タグは書き込まないようにしてください。 <br>
    <br><br></td>
  </tr>
</table>
</center></div>
<form action="$script" method="$method">
<input type=hidden name=mode value="env_init">
<input type=hidden name=pass value="$FORM{'pass'}">
<div align="center"><center><table width="600">
      <tr>
        <td colspan="2">● ページタイトルの設定</td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td>タイトル</td>
        <td><input type=text name=title size=25 value="$title"></td>
      </tr>
      <tr>
        <td>文字サイズ</td>
        <td><select name=t_size>
<option value=$t_size>$t_size
<option vaue=8>8
<option vaue=7>7
<option vaue=6>6
<option vaue=5>5
<option vaue=4>4</select><br>
        <font size="1">画像を指定した場合、文字は表示されません。</font></td>
      </tr>
      <tr>
        <td>文字色</td>
        <td><input type=text name=t_color size=25 value="$t_color">
    <font color="$t_color">■</font> 
        </td>
      </tr>
      <tr>
        <td>文字スタイル</td>
        <td><input type=text name=t_face size=25 value="$t_face"></td>
      </tr>
      <tr>
        <td>画像</td>
        <td><input type=text name=timg size=25 value="$timg"><br><font size="-1"使用しない場合は空欄</font></td>
      </tr>
      <tr>
        <td>画像縦サイズ</td>
        <td><input type=text name=timg_h size=25 value="$timg_h"><br><font size="-1">ピクセル値で指定</font></td>
      </tr>
      <tr>
        <td>画像横サイズ</td>
        <td><input type=text name=timg_w size=25 value="$timg_w"><br><font size="-1">ピクセル値で指定</font></td>
      </tr>
      <tr>
        <td>画像代替テキスト</td>
        <td><input type=text name=timg_a size=25 value="$timg_a"></td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td colspan="2">● ページ全体の設定</td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td>背景画像</td>
        <td><input type=text name=bgr size=25 value="$bgr"><br><font size="-1"使用しない場合は空欄</font></td>
      </tr>
      <tr>
        <td>背景色</td>
        <td><input type=text name=bgc size=25 value="$bgc">
    <font color="$bgc">■</font> 
        </td>
      </tr>
      <tr>
        <td>文字色</td>
        <td><input type=text name=text size=25 value="$text">
    <font color="$text">■</font> 
        </td>
      </tr>
      <tr>
        <td>リンク色</td>
        <td><input type=text name=link size=25 value="$link">
    <font color="$link">■</font> 
        </td>
      </tr>
      <tr>
        <td>表示後のリンク色</td>
        <td><input type=text name=vlink size=25 value="$vlink">
    <font color="$vlink">■</font> 
        </td>
      </tr>
      <tr>
        <td>アクティブ時のリンク色</td>
        <td><input type=text name=alink size=25 value="$alink">
    <font color="$alink">■</font> 
        </td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td colspan="2">● 記事書込欄の設定</td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td>項目文字色</td>
        <td><input type=text name=q_color size=25 value="$q_color">
    <font color="$q_color">■</font>
      </tr>
      <tr>
        <td>項目文字スタイル</td>
        <td><input type=text name=q_face size=25 value="$q_face">
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td colspan="2">● 記事表\示欄の設定</td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td>記事題名色</td>
        <td><input type=text name=subj_color size=25 value="$subj_color">
    <font color="$subj_color">■</font>
      </tr>
      <tr>
        <td>記事題名背景色</td>
        <td><input type=text name=mt_color size=25 value="$mt_color">
    <font color="$mt_color">■</font>
      </tr>
      <tr>
        <td>記事背景色</td>
        <td><input type=text name=mm_color size=25 value="$mm_color">
    <font color="$mm_color">■</font>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td colspan="2">● 「<font face="Verdana">HomePage</font>」欄に記入された場合に表\示される画像の設定</td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td>画像</td>
        <td><input type=text name=limg size=25 value="$limg"></td>
      </tr>
      <tr>
        <td>画像縦サイズ</td>
        <td><input type=text name=limg_h size=25 value="$limg_h"><br><font size="-1">ピクセル値で指定</font></td>
      </tr>
      <tr>
        <td>画像横サイズ</td>
        <td><input type=text name=limg_w size=25 value="$limg_w"><br><font size="-1">ピクセル値で指定</font></td>
      </tr>
      <tr>
        <td>画像代替テキスト</td>
        <td><input type=text name=limg_a size=25 value="$limg_a"></td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td colspan="2">● その他設定</td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
      <tr>
        <td>管理人名</td>
        <td><input type=text name=manager size=25 value="$manager">
      </tr>
      <tr>
        <td>管理人レスの文字色</td>
        <td><input type=text name=mgr_color size=25 value="$mgr_color">
    <font color="$mgr_color">■</font> 
        </td>
      </tr>
      <tr>
        <td>[ <font face="Verdana">HOME</font> ]の戻り先</td>
        <td><input type=text name=home size=50 value="$home"></td>
      </tr>
      <tr>
        <td>最大記事数 </td>
        <td><input type=text name=max size=10 value="$max"></td>
      </tr>
      <tr>
        <td colspan="2"><hr noshade>
        </td>
      </tr>
EOF

if ($mailing) {
print "<tr><td>メール送信</td>";
print "<td><input type=text name=mailto size=25 value=\"$mailto\"></td></tr>\n";
print "<tr><td colspan=2><LI>ここにメールアドレスを記入すると投稿記事を送信します。</td></tr>\n";
print "<tr><td colspan=2><hr></td></tr>\n";
}


print "<tr><th colspan=\"2\">";
print "<input type=\"submit\" value=\"        SEND        \" style=\"font-family: Trebuchet MS\"> <input type=\"reset\" value=\"RESET\" style=\"font-family: Trebuchet MS\"></th></tr>\n";
print "</table></center></div>\n";
print "</form>\n";
print "</blockquote>\n";
print "</body></html>\n";
exit;
}

## --- 環境設定更新処理
sub env_init {
# パスワード認証
if ($pass ne "$FORM{'pass'}") { &error("パスワードが違います。",'NOLOCK'); }

# ロック開始
if ($lockkey == 1) { &lock1; }
elsif ($lockkey == 2) { &lock2; }

open(IN,"$logfile") || &error("Can't open $logfile");
@lines = <IN>;
close(IN);

# ログフォーマットとが正しければ先頭行をカット
if ($lines[0] =~ /^GLIGHT/) { shift(@lines); }
unshift(@lines,"GLIGHT<>$FORM{'title'}<>$FORM{'timg'}<>$FORM{'timg_h'}<>$FORM{'timg_w'}<>$FORM{'timg_a'}<>$FORM{'t_color'}<>$FORM{'t_size'}<>$FORM{'t_face'}<>$FORM{'bgr'}<>$FORM{'bgc'}<>$FORM{'text'}<>$FORM{'link'}<>$FORM{'vlink'}<>$FORM{'alink'}<>$FORM{'q_color'}<>$FORM{'q_face'}<>$FORM{'mt_color'}<>$FORM{'mm_color'}<>$FORM{'limg'}<>$FORM{'limg_h'}<>$FORM{'limg_w'}<>$FORM{'limg_a'}<>$FORM{'home'}<>$FORM{'max'}<>$FORM{'subj_color'}<>$FORM{'mailto'}<>$FORM{'manager'}<>$FORM{'mgr_color'}<>\n");

# ログを更新
open(OUT,">$logfile") || &error("Can't write $logfile");
print OUT @lines;
close(OUT);

unlink($lockfile) if (-e $lockfile);

&open_log2;

# 設定を認識
($head,$title,$timg,$timg_h,$timg_w,$timg_a,$t_color,$t_size,$t_face,
$bgr,$bgc,$text,$link,$vlink,$alink,$q_color,$q_face,$mt_color,
$mm_color,$limg,$limg_h,$limg_w,$limg_a,$home,$max,$subj_color,
$mailto,$manager,$mgr_color) = split(/<>/, $init);

# 完了メッセージ
&header;
print "<p align=\"center\"> </p>\n";
print "<p align=\"center\"> </p>\n";
print "<hr width=\"500\" align=\"center\" noshade size=\"4\">\n";
print "<p align=\"center\">環境設定の変更が完了しました。</p>\n";
print "<p align=\"center\"><a href=\"$script\"><img src=\"$img_url\/message-back.gif\"
width=\"85\" height=\"17\" alt=\"BACK\" border=\"0\"></a></p>\n";
print "<hr width=\"500\" align=\"center\" noshade size=\"4\">\n";
print "</body></html>\n";
exit;
}

## --- 過去ログ用フレーム
sub past {
# 過去ログ用カウント
open(NO,"$pastno") || &error("Can't open $pastno",'NOLOCK');
$count = <NO>;
close(NO);

if ($FORM{'ue'} eq "") {
print "Content-type: text/html\n\n";
print "<html>\n<head><title>過去ログ</title></head>\n";
print "<frameset rows=\"110\,*\" FRAMEBORDER=no BORDER=0>\n";
print "<frame name=\"ue\" src=\"$script?mode=past&ue=on\" target=\"sita\">\n";
print "<frame name=\"sita\" src=\"$past_url\/$count\.html\">\n";
print "<noframes>$body\n";
print "<h3>フレーム非対応のブラウザの方は利用できません。</h3>\n";
print "</body></noframes>\n</frameset></html>\n";

} else {
&header;
print "<small>[<a href=\"$script\?\" target=_top>掲示板へ戻る</a>]\n";
print "[<a href=\"$script\?mode=find\" target=_top>ワード検索</a>]</small>\n";
print "<table width=100\%><tr><th bgcolor=#8080C0>\n";
print "<font color=#FFFFFF>過去ログ</font></th></tr></table>\n";
print "<hr size=2><center>\n";
print "[<a href=\"$past_url\/$count\.html\" target=\"sita\">最新</a>]\n";

# 過去ログの[リンク]を新規順に表示
for ($i=$count-1; $i>0; $i--) {
print "[<a href=\"$past_url\/$i\.html\" target=\"sita\">$i</a>]\n";
}
print "</center><hr size=2>\n";
print "</body></html>\n";
}
exit;
}

## --- ログ読みこみ
sub open_log1 {
open(IN,"$logfile") || &error("Can't open $logfile");
@lines = <IN>;
close(IN);

$init = $lines[0];
shift(@lines);
}

## --- ログ読みこみ(ロックなし)
sub open_log2 {
open(IN,"$logfile") || &error("Can't open $logfile",'NOLOCK');
@lines = <IN>;
close(IN);

$init = $lines[0];
shift(@lines);
}

シンタロー[MAIL][URL][WriteDate :Sat Apr 8 21:21:47 2000]

自分のURLで紹介しようと思いましたが、
いくらやっても、ソースが表示できないので、
申し訳ありませんが、そのまま書かせていただきました。
ずいぶんとながくなってご迷惑をおかけしてしまったと思いますので、
ご都合が悪ければ削除してくださって結構です。

追伸
ちなみに以下の数値はパーミッションの設定値です。
一応これも指示通りにしたつもりなのですが、
やはりうまく行きませんでした。

drwxrwxrwx  3 shintaro  users   512 Apr  6 22:33 mono_bbs(777)

-rw-rw-rw-  1 shintaro  users      1 Apr  6 22:33 count.dat(666)
-rw-r--r--  1 shintaro  users   1035 Apr  6 22:35 icon.htm(644)
drwxr-xr-x  2 shintaro  users    512 Apr  6 22:32 img(644)
-rwxr-xr-x  1 shintaro  users  19900 Apr  6 22:33 jcode.pl(755)
-rwxr-xr-x  1 shintaro  users  53559 Apr  6 22:55 monobbs.cgi(755)
-rw-rw-rw-  1 shintaro  users      0 Apr  6 22:33 monobbs.log(666)

-rw-r--r--  1 shintaro  users  1093 Apr  6 22:36 message-back.gif(644)
-rw-r--r--  1 shintaro  users   882 Apr  6 22:36 message-home.gif(644)
-rw-r--r--  1 shintaro  users  1090 Apr  6 22:36 message-list.gif(644)
-rw-r--r--  1 shintaro  users  1560 Apr  6 22:36 message-master.gif(644)

りく[MAIL][URL][WriteDate :Mon Apr 10 19:32:59 2000]

あたしも初心者なので、はずしてるかもしれないんですが
ロックファイルのディレクトリが指定されてませんね
lockってフォルダ作ってますか?
パーミッションエラーは、パーミッションの指定間違いと
ディレクトリが、間違ってても出るそうなんで
これが原因かもしれません
ロックファイルの指定がされているのに、フォルダがないから
かも・・・自信ありませんが(^^;

シンタロー[MAIL][URL][WriteDate :Thu Apr 20 14:55:24 2000]

ご指摘の通り、パーミッションの設定が間違っていたようです。
とにもかくにも今はようやく起動させることに成功しました。
みなさんどうもありがとうございました。

りく[MAIL][URL][WriteDate :Fri Apr 21 01:27:23 2000]

じゃ、とりあえず完了でいいですよね
回答(必須): 状態:

お名前(必須):

e-mail:

URL:

Back