#!/usr/bin/perl # # 先頭行の例:a #!/usr/bin/perl # 先頭行の例:b #!/usr/local/bin/perl # 先頭行の例:c #!/bin/perl # #┌───────────────────────────────── #│ JOYFUL NOTE v1.21 (2002/01/15) #│ Copyright(C) Kent Web 2002 #│ webmaster@kent-web.com #│ http://www.kent-web.com/ #└───────────────────────────────── # original version 'Joyful Note v1.21'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #│ 3. 添付の home.gif は L.O.V.E の mayuRin さんによる画像です。 #└───────────────────────────────── # 以上はオリジナルスクリプトの規定です。 # この改造スクリプトでは、以下の規定をお守りください。 $ver = 'JOYFULYY v2.50'; #┌───────────────────────────────── #│ JOYFULYY #│ This was edited by Yamamoto #│ raikouspace@nifty.com #│ http://izu22.cool.ne.jp/y-pg/ #│ http://homepage1.nifty.com/raikou/ #└───────────────────────────────── # 改造版著作権表示部(削除改変不可) #┌───────────────────────────────── #│ [追加注意事項] #│ 1. このスクリプトはJOYFUL NOTE v1.21を改造したものです。 #│ 設置に関する質問その他の質問を「Kent Web」様にしないでください。 #│ また、「Kent Web」様のサポート掲示板での問い合わせもしないでください。 #│ 2. 以下の利用規定に基づき「Kent Web」様に著作権のあるCGIスクリプトを #│ 改造し再配布します。 #│ 「再配布の規定について」http://www.kent-web.com/pubc/saihaifu.html #│ 「フリーソフト利用規定」http://www.kent-web.com/pubc/kitei.html #│ 2. このスクリプトの利用規定は「Kent Web」様の「再配布の規定について」 #│ および「フリーソフト利用規定」の主旨と同様のものとします。 #│ この改造スクリプトを再改造できますが、著作権表示部は削除改変不可です。 #│ 著作権表示部に再改造者の著作権表示を追加してご使用ください。 #│ 3. このスクリプトを使用したいかなる損害に対しても、 #│ 作者および改造者は一切の責任を負いません。 #│ 5 改造者への質問は、こちらにお願いします。 #│ 「JOYFULYYのご案内」http://izu22.cool.ne.jp/y-pg/ #└───────────────────────────────── # ここには設定項目はありません。 # 項目設定プログラム「j_set.cgi」により、項目を設定します。 # 設定項目ファイル読み込み if (-e './j_param.cgi') { require './j_param.cgi'; &joy_pm_set; } else { if (-e './joyset.pl') { # 旧設定項目ファイル $msg ="新設定項目ファイルが見つかりません

「j_set.cgi」を起動して、新設定項目ファイル(j_param.cgi)を作成してください
旧設定項目ファイル(joyset.pl)の設定を取り込むことができます。"; } else { $msg ="設定項目ファイル(j_param.cgi)が見つかりません
「j_set.cgi」を起動して作成できます"; } &header; print "



\n"; print "
$msg
\n"; print "
\n"; print "\n"; print "
\n"; print "

$ver\n"; print "


\n"; print "
\n"; exit; } &vupvalue; # ●VUP新変数の初期値 # メイン処理 &decode; &axs_check; # ●複数画像最大数、(入力変数セット、入力処理用) &inperm0; # 日記帳として使う場合 if ($diary){ if ($in{'kpass'}){ if ($diary_mode){ $dmd = "<$diary_mode>"; } else { $dmd = ""; } if ($in{'kpass'} ne $pass) { &error("管理パスワードが違います$dmd"); } $diary_no_form = 0; # 入力フォーム表示 } else { $diary_no_form = 1; # 入力フォームの非表示 } } else { # 通常モードで、日記帳記事 if ($in{'diary_kiji'}){ if ($in{'kpass'} ne $pass) { &error("管理パスワードが違います <diary_op>"); } if ( $in{'pwd'} eq "") { $in{'pwd'} = $in{'kpass'}; } # 記事の削除キー } $diary_no_form = 0; # 入力フォーム表示 } if ($mode eq "howto") { &howto; } elsif ($mode eq "howtopic") { &howtopic; } elsif ($mode eq "find") { &find; } elsif ($mode eq "usr_del") { &usr_del; } elsif ($mode eq "usr_edt") { &usr_edt; } elsif ($mode eq "regist") { ®ist; } elsif ($mode eq "res") { &res_form; } elsif ($mode eq "admin") { &admin; } elsif ($mode eq "admin2") { &admin2; } # ●管理用先頭メッセージ elsif ($mode eq "past") { &past; } elsif ($mode eq "check") { ✓ } elsif ($mode eq "imgset") { &imageset; } # ■アイコンを選択して戻ってきた elsif ($mode eq "resimgset") { &res_form; } # ■アイコンを選択して戻ってきた elsif ($mode eq "gfsize") { &gfsize; } # ●投稿画像表示サイズ指定して戻ってきた elsif ($mode eq "regist_page") { ®ist_page; } # ●投稿フォームのページへ if ($mode ne "regist") { # 書込み後は除く if ($in{'formmode'} eq "regist_page") { ®ist_page; } # ●投稿フォームのページへ } &html_log; #----------------# # アクセス制限 # #----------------# sub axs_check { # ホスト名を取得 &get_host; local($flag)=0; foreach (@deny) { # ■アクセス制限(ホスト名、IPアドレス) if (!$_) { next; } $_ =~ s/\*/\.\*/g; if ($host =~ /$_/i) { $flag=1; last; } } if ($flag) { &error("アクセスを許可されていません"); } if ($taboo_flg){ # ●登録単語で書込み制限する $flag = 0; foreach (@taboo) { if (!$_) { next; } $_ =~ s/\*/\.\*/g; if ($in{'sub'} =~ /$_/i) { $flag=1; last; } if ($in{'comment'} =~ /$_/i) { $flag=1; last; } } if ($flag) { &error("アクセス不能\です"); } } } #--------------# # 記事表示部 # #--------------# sub html_log { # クッキーを取得 &get_cookie; # フォーム長を調整 &get_agent; # ヘッダを出力 &header; # カウンタ処理 if ($counter) { &counter; } # トップメニュー表示内容 $allmenu_flg = 0; if ($formposition == 0 && !$diary_no_form){ if ( !$regist_form_page ){ $allmenu_flg = 1; } if ( $in{'mode'} eq "regist_in_page" ){ $allmenu_flg = 1; } if ( $in{'formmode'} eq "regist_in_page" ){ $allmenu_flg = 1; } if ($regist_form_page && $in{'mode'} eq "regist" && $in{'picnsub'} eq ""){ $allmenu_flg = 0; # 投稿後は閲覧用のみ表示、画像投稿数変更は除く } if ( $diary ){ $allmenu_flg = 1; } } if ($menuposition == 1){ # メニュートップ表示 if ($allmenu_flg){ # 通常全表示 if ($counter_disp || $in{'kpass'}){ print "-\n"; } # 日記管理ではカウンター表示 &menu_disp("all"); print "
\n"; } else { if (!($diary && !$diary_menu && $diary_no_form)){ # 日記帳で閲覧メニュー非表示を除く if ( $diary_menu == 1 ){ # 日記帳で「トップに戻る」のみ表示 # if ($homepage ne "http://www.xxx.jp/" && $homepage ne "" ){ # 日記管理ではカウンター表示 if ($counter_disp || $in{'kpass'}){ print "-\n"; } &menu_disp("home"); # 閲覧用「トップに戻る」表示 # } } else { # 日記管理ではカウンター表示 if ($counter_disp || $in{'kpass'}){ print "-\n"; } &menu_disp("top"); # 閲覧用のみ表示 } print "
\n"; } } # if ($t_underbar && !$diary){ # タイトル下の線 日記帳では無し if ($t_underbar){ # タイトル下の線 print "

\n"; } else { print "

\n"; } } # タイトル部 print "

\n"; if ($banner1 ne "") { print "$banner1

\n"; } if ($title_gif eq '') { print "$title
\n"; } else { # print "\"$title\"\n"; print "\"$title\"
\n"; } if ($title2 ne '') { print "\n"; print "$title2
\n"; } # ●管理データ読み込み、先頭メッセージ・アイコン &ad_rd_all; if ($menuposition == 0){ # メニュー、タイトル下表示(通常) # if ($t_underbar && !$diary){ # タイトル下の線 日記帳では無し if ($t_underbar){ # タイトル下の線 print "


\n"; } else { print "
\n"; } if ($allmenu_flg){ # 通常全表示 &menu_disp("all"); # 通常表示 print "
\n"; } else { if (!($diary && !$diary_menu && $diary_no_form)){ # 日記帳で閲覧メニュー非表示を除く if ( $diary_menu == 1 ){ # 日記帳で「トップに戻る」のみ表示 if ($homepage ne "http://www.xxx.jp/" && $homepage ne "" ){ &menu_disp("home"); # 閲覧用「トップに戻る」表示 } } else { &menu_disp("top"); # 閲覧用のみ表示 } print "
\n"; } } } # 投稿入力フォーム、ページ上表示 $formdisgflg = 0; if (!$regist_form_page || $in{'mode'} eq "regist_in_page" || $in{'formmode'} eq "regist_in_page" ){ $formdisgflg = 1; # 投稿フォーム通常表示 if ($regist_form_page && $in{'mode'} eq "regist" && $in{'picnsub'} eq "" ){ # 投稿後はボタン表示、画像投稿数変更は除く $formdisgflg = 0; # 投稿フォームなし、ボタン表示 } } if ( $formdisgflg ){ # 投稿フォーム通常表示 if ($formposition == 0 && !$diary_no_form){ if ($in{'mode'} eq "regist_in_page" || $in{'formmode'} eq "regist_in_page" ){ if (!$diary){ # 日記帳対応 print "

新規投稿フォームのOFF\n"; } } ®ist_form; } } if ($ImageCheck) { print "・・・画像は管理者が許可するまで「しばらくおまちください」のアイコンが表\示されます・・・
\n"; } if ( $picbod ){ print "・・・枠のある画像はクリックすると拡大表\示します・・・
\n"; } if ( $picpopup ){ # ポップアップウィンドウで表示 print <<"EOM"; EOM } print "
\n"; if ( $diary ){ print "
\n"; } # ●管理用先頭メッセージ表示 if ($kmsg ne "" ) { print <<"EOM";
$kmsg


EOM } if ( !$formdisgflg ){ # 投稿フォームなし、ボタン表示 if ($formposition == 0 && !$diary_no_form){ if ($regist_form_page == 2){ $modetmp = "regist_page"; } else { $modetmp = "regist_in_page"; } print "

\n"; print "\n"; if ($diary){ # 日記帳対応 print "\n"; } print "\n"; print "
\n"; } } print "
\n"; # ページ区切り処理 $start = $page + 1; $end = $page + $p_log; # ●現 # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; $i=0; $flag=0; while () { # ●複数画像の属性も読み込み # ($no,$reno,$date,$name,$mail,$sub,$comment, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); &inperm2; # 入力変数セット、入力処理 if ($reno eq "") { $i++; } if ($i < $start) { next; } if ($i > $end) { next; } # 題名の長さ if (!$diary){ $sub =~ s//>/g; # タグ処理 if (length($sub) > $sub_len*2) { $sub = substr($sub,0,$sub_len*2); $sub .= "..."; } # } else { # 日記帳では題名の長さはノーチェック # $tmplen = $diary_sub_len * 2; # if (length($sub) > $tmplen) { # $sub = substr($sub,0,$diary_sub_len*2); # $sub .= "..."; # } } if ($mail) { $name = "$name"; } if ($home_icon && $url) { $url = "HomePage"; } elsif (!$home_icon && $url) { $url = "<HOME>"; } if (!$reno && $flag) { print "

\n"; $flag=1; } # 記事枠色、記事背景色を取り出す v2.47より if ( $color =~ /-/ ){ # 個別記事の枠色背景色を取り出し ($color_ch,$col_bd,$col_bg) = split(/-/, $color); $color = $color_ch; if ( !$kiji_bd ){ $col_bd = $tbl_bordercol; } # 枠色設定なし if ( !$kiji_bg ){ $col_bg = $tbl_color; } # 背景色設定なし if ( $color eq "" ) { $color = $COLORS[0]; } # 念のため if ( $col_bd eq "" ){ $col_bd = $tbl_bordercol; } # 枠色が入っていない if ( $col_bg eq "" ){ $col_bg = $tbl_color; } # 背景色が入っていない # if ($col_bd eq "") { $col_bd = $COLORSBD[0]; } # if ($col_bg eq "") { $col_bg = $COLORSBG[0]; } # 他のログ形式対応 if ($color !~ /^#/) { $color = "#".$color; } if ($col_bd !~ /^#/){ $col_bd = "#".$col_bd; } if ($col_bg !~ /^#/){ $col_bg = "#".$col_bg; } } else { # 標準記事枠色、標準記事背景色 $col_bd = $tbl_bordercol; $col_bg = $tbl_color; } if (!$reno) { if ( $tblbg_kiji ){ $tmpbgcl = ""; } else { $tmpbgcl = " BGCOLOR=\"$col_bg\""; } if ($tblwd_tn_kiji == 0){ # ● 記事表示枠の幅、0:% 1:ピクセル $tmptblwd = "$tblwd_size_kiji\%"; } else { $tmptblwd = "$tblwd_size_kiji"; } print "
\n"; $flag=1; } if ($reno) { if ($name ne ""){ # 日記帳以前の記事 # print "
\n"; print "\n"; print "\n"; print "



\n"; } else { # 日記帳の記事 print "
\n"; } } if ($name ne ""){ # 日記帳以前の記事 if (!$title_turn){ print "\n"; } else { # 投稿記事の先頭部分の折り返し print "
\n"; # v2.50改修 } } else { # 日記帳の記事 print "
\n"; } # if ($reno) { print ""; } if ($reno) { if ($name ne ""){ # 日記帳以前の記事 print ""; } } if ($name ne ""){ # 日記帳以前の記事 # 投稿記事の先頭部分の折り返し if ($tblttl_kiji){ $tmpsub = ""; } else { $tmpsub = " nowrap"; } print ""; } else { print " "; } } if (!$reno && !$name_guide) { if ($name ne ""){ # 日記帳以前の記事 print "投稿者:"; print "$name"; print " 投稿日:$date "; } else { # 日記帳の記事 &con_week; if ($diary_day){ print ""; } else { # 日記帳の記事 if ($diary_no || $in{'kpass'}){ if (!$diary_day){ print ""; } } if ($url ne ""){ if (!$title_turn){ print "\n"; } else { print "\n"; # v2.50改修 } } if (!$reno) { if (!$diary_no_form && !$non_res) { # 日記帳対応、ゲストブック対応 # 返信ボタンの表示 if (!$title_turn){ print "\n"; # 注:2通り方法あり、 030115 } } else { if (!$diary_no_form && !$non_res) { # 返信ボタンの表示 # print "\n"; print "\n"; } } print "


"; # 記事題名の後改行、投稿者名から次の行にする if ($title_turn){ $tmpsub = '
'; } else { $tmpsub = "  "; } print "$sub$tmpsub"; } else { # 日記帳の記事 if ($diary_title == 2){ print "
"; } else { print ""; } if ($diary_title){ print "$sub$date "; } } } else { # 親記事の、投稿者名の表示をレスと同様にするケースも含む if ($name ne ""){ # 日記帳以前の記事 print "$name"; print " - $date "; } else { # 日記帳の記事 &con_week; if ($diary_day){ print "$date "; } } } if ($name ne ""){ # 日記帳以前の記事 print "No\.$no"; } print "No\.$no   $url $url\n"; } else { # 投稿記事の先頭部分の折り返し print "\n"; # v2.50改修 } print "
\n"; print "\n"; print "\n"; print "\n"; # 画像倍率 if ( $kiji_bd || $kiji_bg ){ print "\n"; print "\n"; } if ($diary){ # 日記帳対応 print "\n"; } if ($name eq ""){ $btm_nm = "追加"; } else { $btm_nm = "返信"; } print "
\n"; if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング print "
"; } print "\n"; # if ($reno) { print "\n"; } $gf_0flg = 0; # ■アイコン画像があればアイコンを表示する(モードは関係なし) if ((length $gf_tail[0] > 1) and !($gf_tail[0] =~ /^\./)) { if ($reno) { if ($name ne ""){ # 日記帳以前の記事 print "\n"; } } &ad_ic_ttl($gf_tail[0]); if ($k_title eq ""){ $ic_alt = $gf_tail[0]; } else { $ic_alt = $k_title; } print "\n"; if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング print "\n"; print "


$ic_alt"; } else { # 通常の記事 print ""; } } else { # if (!$reno) { print "
\n"; } if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング print "
"; } else { # 通常の記事 print "
"; } # ●複数画像の表示―先頭画像 $gfc = 0; $tail = $gf_tail[0]; # $w = $gf_w[0]; # $h = $gf_h[0]; $gf_pass = ""; if (-e "$ImgDir$no\_$gfc$tail") { $gf_pass = "$ImgUrl$no\_$gfc$tail"; # 通常joyfulyy画像 $gf_pass2 = "$no\_$gfc$tail"; $gf_pass_img = "$ImgDir$no\_$gfc$tail"; } elsif ($gf_w[0] ne "shift0->1") { # shift 0->1 画像に対応 v2.46 if (-e "$ImgDir$no$tail") { $gf_pass = "$ImgUrl$no$tail"; $gf_pass2 = "$no$tail"; $gf_pass_img = "$ImgDir$no$tail"; } } if ($gf_pass) { if ($tail eq ".gif" || $tail eq ".jpg" || $tail eq ".png") { if ($ImageCheck && $chk != 1) { print "

\n"; } else { &UpFile_size($gf_pass_img); # 画像実サイズ取得 $W, $H if ( $picpopup ){ # ☆ print "

"; } else { print "

"; } &gfsz_dsp; if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング print "\n"; } else { # 通常の記事 print "\n"; } } } else { print "

Download:$gf_pass2 $gf_pass2\n"; } $gf_0flg = 1; } } # 自動リンク if (!$pic_layout){ # ●投稿画像を載せる位置 if ($autolink) { &auto_link($comment); } if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング if ( $gf_flg == 0 ) { # 先頭画像あり print "

\n"; } } print "$comment"; } # ●複数画像の表示―追加画像 $gf_flg = 0; foreach $gfc (1 .. $gf_maxno) { # 追加の添付ファイルの数ではなく、最大数を調べる $tail = $gf_tail[$gfc]; if ( length $tail <= 1 ) { next; } # 削除ファイルを飛ばす # $w = $gf_w[$gfc]; # $h = $gf_h[$gfc]; $gf_pass = ""; if (-e "$ImgDir$no\_$gfc$tail") { $gf_pass = "$ImgUrl$no\_$gfc$tail"; # 通常joyfulyy画像 $gf_pass2 = "$no\_$gfc$tail"; $gf_pass_img = "$ImgDir$no\_$gfc$tail"; } elsif ($gfc == 1 && $gf_w[0] eq "shift0->1") { # shift 0->1 画像に対応 v2.46 if (-e "$ImgDir$no$tail") { # shift 0->1 画像に対応 v2.46 $gf_pass = "$ImgUrl$no$tail"; $gf_pass2 = "$no$tail"; $gf_pass_img = "$ImgDir$no$tail"; } } if ($gf_pass) { if ($tail eq ".gif" || $tail eq ".jpg" || $tail eq ".png") { if ( $gf_flg == 0 ){ if ( $gf_0flg ){ print "

\n"; } else { print "

\n"; } $gf_flg = 1; } if ($ImageCheck && $chk != 1) { print "\n"; } else { &UpFile_size($gf_pass_img); # 画像実サイズ取得 $W, $H if ( $picpopup && $W > 0 && $H > 0){ # ☆ print ""; } else { print ""; } &gfsz_dsp; if ($picpopup && ( $W == 0 || $H == 0)){ $missmsg = " alt=\"画像サイズを取得できませんでしたので、そのまま表\示します\""; } else { $missmsg = ""; } print "\n"; } } else { if ( $gf_flg == 0 ) { print "

\n"; $gf_flg = 1; } print "Download:$gf_pass2 $gf_pass2\n"; } } } if ($pic_layout){ # ●投稿画像を載せる位置 if ($autolink) { &auto_link($comment); } if ( $gf_flg ) { # 追加画像あり print "
\n"; } else { # 先頭画像あり if ( $gf_0flg ) { print "

\n"; } } if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング print "

$comment

"; } else { # 通常の記事 print "

$comment"; } } # if (!$reno) { print "\n"; } print "

\n"; if ($name eq "" && $diary_comct){ # 日記帳の記事・センタリング print "
"; } } close(IN); print "
\n"; print "
\n"; # 投稿入力フォームページ下表示 $formdisgflg = 0; if (!$regist_form_page || $in{'mode'} eq "regist_in_page" || $in{'formmode'} eq "regist_in_page" ){ $formdisgflg = 1; # 投稿フォーム通常表示 if ($regist_form_page && $in{'mode'} eq "regist" ){ # 投稿後はボタン表示 $formdisgflg = 0; # 投稿フォームなし、ボタン表示 } } if ( $formdisgflg ){ # 投稿フォーム通常表示 if ($formposition == 1 && !$diary_no_form){ # 日記帳対応 print "\n"; print "
\n"; print "
\n"; if ($in{'mode'} eq "regist_in_page" || $in{'formmode'} eq "regist_in_page" ){ if (!$diary){ # 日記帳対応 print "

新規投稿フォームのOFF\n"; } } print "―\―\ 新規投稿 ―\―\ \n"; &menu_disp("bottom"); ®ist_form; # 投稿入力フォーム print "


\n"; } } else { # 投稿フォームなし、ボタン表示 if ($formposition == 1 && !$diary_no_form){ if ($regist_form_page == 2){ $modetmp = "regist_page"; } else { $modetmp = "regist_in_page"; } print "\n"; print "
\n"; print "\n"; if ($diary){ # 日記帳対応 print "\n"; } print "
\n"; print "\n"; print "
\n"; } } $next = $page + $p_log; $back = $page - $p_log; $p_flag=0; print "

\n"; if ($back >= 0) { $p_flag=1; print "\n"; } if ($next < $i) { $p_flag=1; print "\n"; # # 日記帳対応 $next_i = $i; } # ページ移動ボタン表示 if ($diary && !$diary_no_form){ # 日記帳管理モードでは使わない } else { if ($p_flag) { print "\n"; } } if ($diary && !$diary_no_form && $p_flag){ # 日記帳管理モード print "\n"; } print "
\n"; print "\n"; if ($in{'kpass'}){ # 日記帳対応 print "\n"; } print "
\n"; print "\n"; if ($in{'kpass'}){ # 日記帳対応 print "\n"; } print "
[直接移動]\n"; $x=1; $y=0; while ($i > 0) { if ($page == $y) { print "[$x]\n"; } else { print "[$x]\n"; } $x++; $y = $y + $p_log; $i = $i - $p_log; } print "   (管理モードで直接移動はできません)
\n"; # print "
\n"; if ($picresize) { if ($gf_sz eq "" || $gf_sz == 1){ $gf_sz_st = "標準"; } else { $gf_sz_st .= "$gf_sz倍"; } print "
\n"; print "投稿画像の表\示サイズを変更できます\n"; print "\n"; print ""; print "\n"; print "\n"; if ($in{'kpass'}){ # 日記帳対応 print "\n"; } if ($in{'mode'} eq "regist_page" || $in{'formmode'} eq "regist_page"){ # 投稿フォームのページ表示 print "\n"; } if ($in{'mode'} eq "regist_in_page" || $in{'formmode'} eq "regist_in_page"){ # 投稿フォーム一時表示 print "\n"; } print "
\n"; } print "
\n"; if ( $tblbg_edt ){ $tmpbgcl = ""; } else { $tmpbgcl = " bgcolor=$editbgcl"; } print "\n"; print "
\n"; if ($diary){ # 日記帳対応 if ($diary_no_form){ # 通常画面 print "\n"; if ($page) { print "\n"; } print "管理者用 \n"; print "\n"; } else { # 管理者投稿修正画面 print "\n"; print "処理 \n"; print "記事No \n"; print "\n"; } } else { # 通常 print ""; if ($editcmt){ # ●ページ最下部の記事の修正削除の案内文 if ($editcmt1 ne ""){ print " $editcmt1"; } if ($editcmt2 ne ""){ print "
$editcmt2"; } print "

\n"; } print "処理 \n"; print " 記事No\n"; print " 削除キー\n"; print "\n"; } print "
\n"; if ($editdisp == 1) { # 製作者用表示部 print <<"EOM";

■!これは、改造掲示板です!■
このBBSはケントさんの 「Joyful Note(返信アップロード式)」を改造しているものです。元々は1つの画像を載
せられるBBSですが、これを改造して、複数の画像を載せえられるようにしました。
またケントさんの「YY-BOARD(アイコン式返信ボード) 」を参考に再改造したものです。
EOM } if ($script_body2_flg) { print "\n"; print "$script_body2\n"; } # 著作権表示部(削除改変不可) print "$banner2

\n"; print "- Joyful Note -
\n"; # 改造版著作権表示部(削除改変不可) print "- $ver :Edit by Yamamoto -\n"; print "

\n"; # print "\n\n\n"; print "\n\n\n"; if ($script_end_flg) { print "\n"; print "$script_end\n"; } # アクセスレポート:閲覧時のみ、一度のreport送信 if ($script_accend_flg && $mode eq "" && $acc_timing_flg ==0) { print "\n"; print "$script_accend\n"; } exit; } #---------------------# # メニュー表示 # #---------------------# sub menu_disp { if ( @_[0] eq "all" ){ # 通常全表示 print "[トップに戻る]\n"; print "[使いかた]\n"; print "[画像の投稿方法]\n"; print "[ワード検索]\n"; if ($pastkey){ print "[過去ログ]\n"; } print "[管理用]\n"; } elsif ( @_[0] eq "home" ){ # 投稿フォームページ下表示、投稿フォーム無しの時のトップに戻る print "トップに戻る\n"; } elsif ( @_[0] eq "top" ){ # 投稿フォームページ下表示、投稿フォーム無しの時のトップメニュー print "[トップに戻る]\n"; if ( !$diary_no_form && $formposition ){ # 日記帳対応 print "[新規投稿]\n"; } print "[ワード検索]\n"; if ($pastkey){ print "[過去ログ]\n"; } if (!$diary_no_form){ print "[管理用]\n"; } } elsif ( @_[0] eq "bottom" ){ # 投稿フォームページ下表示のメニュー print "[使いかた]\n"; print "[画像の投稿方法]\n"; } } #-------------------------# # ●投稿フォームのページ # #-------------------------# sub regist_page { # クッキーを取得 &get_cookie; # フォーム長を調整 &get_agent; # ヘッダを出力 &header; # ●管理データ読み込み、先頭メッセージ・アイコン &ad_rd_all; if ($diary){ # 日記帳対応 print "[戻る 日記管理モードはOFF]

\n"; } else { print "[戻る]

\n"; } print "

\n"; if ($title_gif eq '') { print "$title
\n"; } else { # print "\"$title\"\n"; print "\"$title\"
\n"; } print "
\n"; # print "
\n"; print "―\―\ 新規投稿 ―\―\ \n"; &menu_disp("bottom"); ®ist_form; # 投稿入力フォーム # print "
\n"; print "
\n\n\n"; exit; } #---------------------# # 投稿入力フォーム # #---------------------# sub regist_form { # print "
\n"; if ($in{'kpass'}){ print "
\n"; } print "
\n"; print "\n"; print "\n"; # 画像倍率 print "\n"; if (!$diary){ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } if (!$diary){ # 通常 print "\n"; } else { # 日記帳 print "\n"; if ($diary_day == 1){ if ($gfin_day eq ""){ &get_time2; $gfin_day = $date; } print "\n"; } elsif ($diary_day > 1) { &get_time; &con_week; $tmp = ""; if ($diary_day ==2){ $tmp = "日付 "; } if ($diary_day ==3){ $tmp = "日時 "; } print "\n"; print "\n"; } if ($diary_title){ $tmplen = 60; # $diary_sub_len * 2; print "\n"; } } if (!$icon_mode) { # ●先頭添付画像 print "\n"; print "\n"; } else { # ■アイコンBBS print ""; # v2.43にて削除 # if ($in{'kpass'}){ # 日記帳対応 # print "\n"; # } print "\n"; if ($c_icon) { &ad_ic_ttl($c_icon); if ($k_title eq ""){ $ic_alt = $c_icon; } else { $ic_alt = $k_title; } print "\n"; } print <<"EOM"; EOM # ● 添付画像、入力フォームを指定数追加 if ($gf_no > 0) { foreach $gfc (1 .. $gf_no) { print "\n"; # ファイルの参照を取り出せても、セキュリティのために、 # 初期値を設定したり、スクリプトで値を操作することはできませんでした。 print "\n"; } } # ●追加画像入力フォームの行数変更 if ($gf_no > 0) { $gf_nost = $gf_no; $gf_msg = "投稿画像の数を変更できます→"; } else { $gf_nost = "0"; $gf_msg = "画像を10個まで載せられます→"; } print <<"EOM"; EOM if (!$in{'kpass'}){ print "
おなまえ\n"; print "
Eメール\n"; print "\n"; print "
URL\n"; print "\n"; print "
題  名\n"; print "\n"; print "\n"; print "\n"; print "
日記管理モード \n"; print "\n"; print "\n"; print " [日記管理モードOFF]\n"; print "\n"; print "
日  付\n"; print "\n"; print " (修正・削除可)
$tmp$date
題  名\n"; print "\n"; print "
先頭画像
イメージ$ic_alt"; $icmsg = "再選択"; } else { print ""; $icmsg = "アイコンを選択"; } print "  "; print ""; print " (画像の参照はクリアされます)\n"; print "
コメント
画 像 $gfc
$gf_msg (画像の参照はクリアされます)
削除キー\n"; print "\n"; print "(英数字で8文字以内。自分の記事を修正・削除できて便利です)\n"; } else { # 日記帳対応 管理者投稿修正画面 print "
\n"; print "\n"; print "\n"; # print "(この記事の修正・削除の時は、現在の管理パスワードが削除キーとなります)\n"; } if ($in{'mode'} eq "regist_page" || $in{'formmode'} eq "regist_page"){ # 投稿フォームのページ表示 print "\n"; } if ($in{'mode'} eq "regist_in_page" || $in{'formmode'} eq "regist_in_page"){ # 投稿フォーム一時表示 print "\n"; } print "
文字色\n"; if ( $kiji_bd || $kiji_bg ){$tm1 = ""; $tm2 = "";} else {$tm1 = ""; $tm2 = "";} if ($c_color eq "") { $c_color = $COLORS[0]; } foreach (0 .. $#COLORS) { if ($c_color eq "$COLORS[$_]") { $checked = " checked"; } else { $checked = ""; } print ""; print "$tm1■$tm2\n"; } if ( $kiji_bd ){ # 記事背景色 print "
枠 色\n"; if ($c_col_bd eq "") { $c_col_bd = $COLORSBD[0]; } foreach (0 .. $#COLORSBD) { if ($c_col_bd eq "$COLORSBD[$_]") { $checked = " checked"; } else { $checked = ""; } print ""; print "\n"; } } if ( $kiji_bg ){ # 記事枠色 print "
背景色\n"; if ($c_col_bg eq "") { $c_col_bg = $COLORSBG[0]; } foreach (0 .. $#COLORSBG) { if ($c_col_bg eq "$COLORSBG[$_]") { $checked = " checked"; } else { $checked = ""; } print ""; print "\n"; } } print "
\n"; } #---------------------# # ●画像表示サイズ # #---------------------# sub gfsz_dsp { $gf_bod = 0; # if ($w && $h ){ if ($picresize){ # ●投稿画像表示サイズの変更 if ($gf_sz eq "" || $gf_sz <= 0){ $gf_sz = 1;} } else { # ●従来の投稿画像表示も、実サイズを元にする $gf_sz = 1; } if ($W < 10 || $H < 10 || $W eq "" || $H eq ""){ # もしもの時に備える $w = $gf_w[$gfc]; $h = $gf_h[$gfc]; if ($w && $h ){ if ( $picbod ) { if ( $w >= $MaxW ) { $gf_bod = 1; } # 横幅 if ( $h >= $MaxH ) { $gf_bod = 1; } # 縦幅 } $gf_wh = " width=$w height=$h"; } else { $gf_wh = ""; } } else { if ( $W <= ($MaxW * $gf_sz) && $H <= ($MaxH * $gf_sz)){ $gf_wh = ""; # そのまま表示 } else { # 縮小表示 $w = int($MaxW * $gf_sz); $h = int($H * ($MaxW * $gf_sz / $W)); if ($h > ($MaxH * $gf_sz)){ $h = int($MaxH * $gf_sz); $w = int($W * ($MaxH * $gf_sz / $H)); } $gf_wh = " width=$w height=$h"; if ( $picbod ) { if ( $w >= ($MaxW * $gf_sz) ) { $gf_bod = 1; } # 横幅 if ( $h >= ($MaxH * $gf_sz) ) { $gf_bod = 1; } # 縦幅 } } } } #----------------# # ログ書込処理 # #----------------# sub regist { # ●追加画像の数を設定した場合は、戻る if ($in{'picnsub'} eq "再表\示") { $flg = 0; # if ($in{'picnum'} eq "") { $flg = 1; } if ($in{'picnum'} eq "picn00") { $gf_no = 0; $flg = 1; } if ($in{'picnum'} eq "picn01") { $gf_no = 1; $flg = 1; } if ($in{'picnum'} eq "picn03") { $gf_no = 3; $flg = 1; } if ($in{'picnum'} eq "picn05") { $gf_no = 5; $flg = 1; } if ($in{'picnum'} eq "picn10") { $gf_no = 10; $flg = 1; } if ($flg == 1) { # 時間を取得 &get_time; # クッキーを発行 &set_cookie; } if ($in{'formmode'} eq "regist_page") { ®ist_page; } # ●投稿フォームのページへ } elsif ($in{'imageselect'}) { &get_time; # 時間を取得 &set_cookie("icsel-com"); # クッキーを発行 &image("imgset","",""); # アイコン選択画面へ } elsif ($in{'imageselect-res'}) { &get_time; # 時間を取得 &set_cookie("icsel-com"); # クッキーを発行 &image("resimgset","$in{'no'}",""); # アイコン選択画面へ } else { ®ist2; } } sub regist2 { # ★↓ v2.46x4にて、追加 # ファイルロック if ($lockkey) { &lock; } # ログを開く open(IN,"$logfile") || &error("Open Error : $logfile"); @lines = ; $double_regist_flg = 0; $tmpcnt = 0; # 二重投稿チェックフラグ foreach (@lines) { ($no,$reno,$date,$name,$mail,$sub,$com,$url) = split(/<>/); if ($in{'name'} eq $name && $in{'sub'} eq $sub && $in{'comment'} eq $com){ $double_regist_flg = 1 ; # 二重投稿あり last; } $tmpcnt++; if ( $tmpcnt >= 30 ){ last; } # 二重投稿なし、ログ書込みへ } close(IN); if ( $double_regist_flg ){ # 二重投稿なら通常記事の表示 if ($lockkey) { &unlock; } &html_log; } # ★↑ 追加は以上 # フォーム入力チェック &form_check; # 時間を取得 &get_time; # クッキーを発行 &set_cookie; # ★ v2.46x4にて、削除 # # ファイルロック # if ($lockkey) { &lock; } # # ログを開く # open(IN,"$logfile") || &error("Open Error : $logfile"); # @lines = ; # close(IN); # 記事NO処理 $top = shift(@lines); ($no,$ip,$time2) = split(/<>/, $top); $no++; # 連続投稿チェック if ($addr eq $ip && $wait > $times - $time2) { &error("連続投稿はもうしばらく時間をおいて下さい"); } # 削除キーを暗号化 if ($in{'pwd'} ne "") { $ango = &encrypt($in{'pwd'}); } # ファイル添付処理 # ■アイコンBBSの時は、先頭画像はなく、アイコンファイル名 if ($icon_mode) { $gf_tailS[0] = $c_icon; $gf_WS[0] = ""; $gf_HS[0] = ""; } # if ($in{'upfile0'}) { &UpFile; } # ●複数画像対応 画像データ格納、アップロード $flag = 0; foreach $gfc ($upfst .. $gf_maxno) { $gf_tmp = "upfile$gfc"; if ($in{$gf_tmp}) { $gf_formflg[$gfc]=1; $gf_upfile[$gfc] = $in{$gf_tmp}; $flag = 1; } else { $gf_formflg[$gfc] = 0; $gf_upfile[$gfc] = ""; } } if ($flag == 1) { &UpFile; } # ●複数画像の最大枝番 $gf_no2 = 0; foreach $gfc ($upfst .. $gf_maxno) { if ($gf_formflg[$gfc] == 1 ) { $gf_no2 = $gfc; } } # 親記事の場合 if ($in{'reno'} eq "") { $i=0; $stop=0; foreach (@lines) { # ●複数画像対応 # ($no2,$reno2,$d,$n,$m,$s,$com, # $u,$ho,$p,$c,$tail2,$w,$h,$chk) = split(/<>/); &inperm1; # 入力変数セット、入力処理 $i++; if ($i > $max-1 && $reno2 eq "") { $stop=1; } if (!$stop) { push(@new,$_); } else { if ($pastkey) { push(@data,$_); } # if (-e "$ImgDir$no2$tail2") { unlink("$ImgDir$no2$tail2"); } foreach $gfc ($upfst .. $gf_maxno) { $tail2 = $gf_tail2[$gfc]; if (-e "$ImgDir$no2\_$gfc$tail2") { unlink("$ImgDir$no2\_$gfc$tail2"); } } } } # ●複数画像対応ログ情報 # unshift(@new,"$no<><>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$ango<>$in{'color'}<>$tail<>$W<>$H<>0<>\n"); if ($in{'name'} eq ""){ $date = $in{'day'}; } # 日記帳日付 # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'}; } $gf_tmp = "$no<><>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$ango<>$tmpcol"; # 先頭画像は無条件で添付 $gf_tmp .= "<>$gf_tailS[0]<>$gf_WS[0]<>$gf_HS[0]<>0"; # 追加画像をセット ®ist_gfset; @tmp = "$gf_tmp<>\n"; unshift(@new,@tmp); unshift(@new,"$no<>$addr<>$times<>\n"); # 過去ログ更新 if ($data[0]) { &pastlog; } # 更新 open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); } # レス記事の場合:トップソートあり elsif ($in{'reno'} && $topsort) { # ●複数画像情報書込 if ($in{'name'} eq ""){ $date = $in{'day'}; } # 日記帳日付 # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'}; } $gf_tmp = "$no<>$in{'reno'}<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$ango<>$tmpcol"; $match=0; @new=(); @tmp=(); foreach (@lines) { ($no2,$reno2) = split(/<>/); if ($in{'reno'} eq "$no2") { $match=1; push(@new,$_); } elsif ($in{'reno'} eq "$reno2") { push(@new,$_); } elsif ($match == 1 && $in{'reno'} ne "$reno2") { $match=2; # ●複数画像情報書込 # 先頭画像は無条件で添付 $gf_tmp .= "<>$gf_tailS[0]<>$gf_WS[0]<>$gf_HS[0]<>0"; # 追加画像をセット ®ist_gfset; push(@new,"$gf_tmp<>\n"); push(@tmp,$_); } else { push(@tmp,$_); } } if ($match == 1) { # ●複数画像情報書込 # 先頭画像は無条件で添付 $gf_tmp .= "<>$gf_tailS[0]<>$gf_WS[0]<>$gf_HS[0]<>0"; # 追加画像をセット ®ist_gfset; push(@new,"$gf_tmp<>\n"); } push(@new,@tmp); # 更新 unshift(@new,"$no<>$addr<>$times<>\n"); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); } # レス記事の場合:トップソートなし else { # ●複数画像情報書込 if ($in{'name'} eq ""){ $date = $in{'day'}; } # 日記帳日付 # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'}; } $gf_tmp = "$no<>$in{'reno'}<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$ango<>$tmpcol"; $match=0; @new=(); foreach (@lines) { ($no2,$reno2) = split(/<>/); if ($match == 0 && $in{'reno'} eq "$no2") { $match=1; } elsif ($match == 1 && $in{'reno'} ne "$reno2") { $match=2; # ●複数画像情報書込 # 先頭画像は無条件で添付 $gf_tmp .= "<>$gf_tailS[0]<>$gf_WS[0]<>$gf_HS[0]<>0"; # 追加画像をセット ®ist_gfset; push(@new,"$gf_tmp<>\n"); } push(@new,$_); } if ($match == 1) { # ●複数画像情報書込 # 先頭画像は無条件で添付 $gf_tmp .= "<>$gf_tailS[0]<>$gf_WS[0]<>$gf_HS[0]<>0"; # 追加画像をセット ®ist_gfset; push(@new,"$gf_tmp<>\n"); } # 更新 unshift(@new,"$no<>$addr<>$times<>\n"); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); } # ロック解除 if ($lockkey) { &unlock; } # メール処理 if (!$prvd_mail){ if ($mailing == 1 && $in{'email'} ne "$mailto") { &mail_to; } elsif ($mailing == 2) { &mail_to; } } elsif ($prvd_mail){ # ●特殊メール通知 if ($prvd_mailing == 1 && $in{'email'} ne "$prvd_mailto") { &mail_to_prvd; } elsif ($prvd_mailing == 2) { &mail_to_prvd; } elsif ($prvd_mailing == 9) { &mail_to_prvd; } # テストモード } } # 追加画像をセット sub regist_gfset { foreach $gfc (1 .. $gf_no2) { if ($gf_formflg[$gfc] == 1 ) { $gf_tmp .= "<>$gf_tailS[$gfc]<>$gf_WS[$gfc]<>$gf_HS[$gfc]"; } else { $gf_tmp .= "<><><>"; } } } #--------------------# # 画像アップロード # #--------------------# sub UpFile { # 画像処理 $macbin =0; $gf_cnt = $upfst - 1; # ■アイコンBBSの時は、1からスタート(初めは1減算) # ●複数画像対応 foreach (@in) { $gf_flag=0; if ($_ =~ /(.*)filename=(.*)/i) { $gf_cnt++; $gf_tailS[$gf_cnt] = ""; # $gf_WS[$gf_cnt] = ""; # $gf_HS[$gf_cnt] = ""; $fname=$2; # $fname =~ s/\"//g; $fname =~ tr/\"\x0D\x0A//d; if ( length $fname > 0 ) { $gf_flag = 1; } # ○念のため if ($gf_cnt > $gf_maxno ){ &error("Program Error graphic form over","lock"); } } if ($_ =~ /application\/x-macbinary/i) { $macbin=1; } if ($_ =~ /(.*)Content-type:(.*)/i) { $tail=$2; } # ● ループ拡大 if ($gf_flag == 1) { $tail =~ s/\r//g; $tail =~ s/\n//g; # ファイル形式を認識 $flag=0; if ($tail =~ /image\/gif/i && $gif) { $tail=".gif"; $flag=1; } if ($tail =~ /image\/jpeg/i && $jpeg) { $tail=".jpg"; $flag=1; } if ($tail =~ /image\/x-png/i && $png) { $tail=".png"; $flag=1; } if ($tail =~ /text\/plain/i && $text) { $tail=".txt"; $flag=1; } if ($tail =~ /lha/i && $lha) { $tail=".lzh"; $flag=1; } if ($tail =~ /zip/i && $zip) { $tail=".zip"; $flag=1; } if ($tail =~ /pdf/i && $pdf) { $tail=".pdf"; $flag=1; } if ($tail =~ /audio\/.*mid/i && $midi) { $tail=".mid"; $flag=1; } if ($tail =~ /msword/i && $word) { $tail=".doc"; $flag=1; } if ($tail =~ /ms-excel/i && $excel) { $tail=".xls"; $flag=1; } if ($tail =~ /ms-powerpoint/i && $ppt) { $tail=".ppt"; $flag=1; } if ($tail =~ /audio\/.*realaudio/i && $ram) { $tail=".ram"; $flag=1; } if ($tail =~ /application\/.*realmedia/i && $rm) { $tail=".rm"; $flag=1; } if ($tail =~ /video\/.*mpeg/i && $mpeg) { $tail=".mpg"; $flag=1; } if ($tail =~ /audio\/.*mpeg/i && $mp3) { $tail=".mp3"; $flag=1; } if (!$flag) { if ($fname =~ /\.gif$/i && $gif) { $tail=".gif"; $flag=1; } if (($fname =~ /\.jpe?g$/i && $jpeg)) { $tail=".jpg"; $flag=1; } if ($fname =~ /\.png$/i && $png) { $tail=".png"; $flag=1; } if ($fname =~ /\.lzh$/i && $lha) { $tail=".lzh"; $flag=1; } if ($fname =~ /\.txt$/i && $text) { $tail=".txt"; $flag=1; } if ($fname =~ /\.zip$/i && $zip) { $tail=".zip"; $flag=1; } if ($fname =~ /\.pdf$/i && $pdf) { $tail=".pdf"; $flag=1; } if ($fname =~ /\.mid$/i && $midi) { $tail=".mid"; $flag=1; } if ($fname =~ /\.doc$/i && $word) { $tail=".doc"; $flag=1; } if ($fname =~ /\.xls$/i && $excel) { $tail=".xls"; $flag=1; } if ($fname =~ /\.ppt$/i && $ppt) { $tail=".ppt"; $flag=1; } if ($fname =~ /\.ram$/i && $ram) { $tail=".ram"; $flag=1; } if ($fname =~ /\.rm$/i && $rm) { $tail=".rm"; $flag=1; } if ($fname =~ /\.mpe?g$/i && $mpeg) { $tail=".mpg"; $flag=1; } if ($fname =~ /\.mp3$/i && $mp3) { $tail=".mp3"; $flag=1; } } # アップロード失敗処理 if (!$flag && !$clip_error) { return; } elsif (!$flag && $clip_error) { &error("$fname は、アップロードできないファイル形式です","lock"); } # ●複数画像対応 $gf_tailS[$gf_cnt] = $tail; } } # ●複数画像対応 foreach $gfc ($upfst .. $gf_cnt) { # 書き込みファイル名の枝番、入力フォームの番号と同じにする # $upfile = $in{'upfile0'}; if ($gf_formflg[$gfc] == 0) { next; } $upfile = $gf_upfile[$gfc]; # マックバイナリ対策 if ($macbin) { $length = substr($upfile,83,4); $length = unpack("%N",$length); $upfile = substr($upfile,128,$length); } # 添付データを書き込み $tail = $gf_tailS[$gfc]; $ImgFile = "$ImgDir$no\_$gfc$tail"; # &error("$ImgFile \$no = $no <> \$gfc = $gfc <> \$tail = $tail OK?","lock"); # $len = $ENV{'CONTENT_LENGTH'}; # if ($len >= $cgi_lib'maxdata) { # ● # &error("現在の添付画像の合計が、$lenバイトです。
$cgi_lib'maxdataバイトを超えたのでアップロードできません","lock"); # } open(OUT,"> $ImgFile") || &error("画像のアップロードに失敗しました","lock"); binmode(OUT); binmode(STDOUT); print OUT $upfile; close(OUT); chmod (0666,$ImgFile); # 画像サイズ取得 &UpFile_size($ImgFile); # 画像表示用縮小サイズ if ($W > $MaxW || $H > $MaxH) { $W2 = $MaxW / $W; $H2 = $MaxH / $H; if ($W2 < $H2) { $key = $W2; } else { $key = $H2; } $W = int ($W * $key) || 1; $H = int ($H * $key) || 1; } # ●複数画像対応 $gf_WS[$gfc] = $W; $gf_HS[$gfc] = $H; } } sub UpFile_size { # 画像サイズ取得 if ($tail eq ".jpg") { ($W, $H) = &JpegSize(@_); } elsif ($tail eq ".gif") { ($W, $H) = &GifSize(@_); } elsif ($tail eq ".png") { ($W, $H) = &PngSize(@_); } } #----------------# # 返信フォーム # #----------------# sub res_form { # フォーム長を定義 &get_agent; # クッキーを取得 &get_cookie; # ログを読み込み open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; # ヘッダを出力 &header; # 関連記事出力 if ($in{'kpass'}){ # 日記帳対応 print "
\n"; print "\n"; print "
\n"; } else { print "[戻る]

\n"; } if (!$in{'no'} && $in{'reno'}) { $in{'no'} = $in{'reno'} } $flag=0; $head_flg = 0; while () { ($no,$reno,$date,$name,$mail,$sub,$com,$url) = split(/<>/); if (!$reno) { $com = "

$com
"; } if ($in{'no'} eq "$no" || $in{'no'} eq "$reno") { if ($name ne "" && $head_flg == 0){ # 日記帳以前の記事 print "<記事NO. $in{'no'}返信フォーム
\n"; $head_flg = 1; $diary_kiji = 0; } elsif ($head_flg == 0){ # 日記帳の記事 print "<記事NO. $in{'no'}追加フォーム
\n"; $head_flg = 1; $diary_kiji = 1; } if ($in{'no'} eq "$no") { $resub = $sub; } if ($url) { $url = "<HOME>"; } if ($reno && !$flag) { print "
\n"; $flag=1; } print "$sub\n"; if ($name ne ""){ # 日記帳以前の記事 print " 投稿者:$name\n"; } else { # 日記帳の記事 print " \n"; } print " 投稿日:$date $url No\.$no
$com

\n"; } } close(IN); if ($flag) { print "

\n"; } print "
\n"; # タイトル名 if (!$diary_kiji){ # 日記帳以前の記事 if ($resub !~ /^Re\:/) { $resub = "Re\: $resub"; } } else { $resub = ""; # 日記帳 } if ($mode eq "resimgset") { $resub = $gfin_sub; } # アイコンを選択して戻ってきた。 print "\n"; if ($res_clip) { print "
\n"; } else { print "\n"; } print "\n"; print "\n"; print "\n"; # 画像倍率 if ( $kiji_bd || $kiji_bg ){ print "\n"; print "\n"; } if ($in{'kpass'}){ # 日記帳対応 print "\n"; } print "\n"; print "
\n"; if (!$diary_kiji){ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } if (!$diary_kiji){ # 日記帳以前の記事 print "\n"; print "\n"; } else { # 日記帳の記事 if (!$diary){ # 通常モードで日記帳の記事に返信している print "\n"; } print "\n"; if ($diary_day == 1){ if ($gfin_day eq ""){ &get_time2; $gfin_day = $date; } print "\n"; } elsif ($diary_day > 1) { &get_time; &con_week; $tmp = ""; if ($diary_day ==2){ $tmp = "日付 "; } if ($diary_day ==3){ $tmp = "日時 "; } print "\n"; print "\n"; } if ($diary_title){ $tmplen = 60; # $diary_sub_len * 2; print "\n"; } } if (!$icon_mode) { # ●先頭添付画像 print "\n"; print "\n"; } else { # ■アイコンBBS print ""; print "\n"; if ($c_icon) { # ●管理データ読み込み、先頭メッセージ・アイコン &ad_rd_all; &ad_ic_ttl($c_icon); if ($k_title eq ""){ $ic_alt = $c_icon; } else { $ic_alt = $k_title; } print "\n"; } print <<"EOM"; EOM # ● 添付画像の追加 if ($res_clip) { if ($gf_no > 0) { foreach $gfc (1 .. $gf_no) { print "\n"; print "\n"; } } print "\n"; print "\n"; } if (!$diary_kiji){ # 日記帳以前の記事 print "
おなまえ\n"; print "
Eメール\n"; print "
URL\n"; print "\n"; print "
タイトル\n"; print " \n"; print "
\n"; print "<これは、日記帳の記事です 現在の管理パスワードが必要です>
\n"; print "管理者用 \n"; print "

\n"; print "\n"; print "\n"; print "
日  付\n"; print "\n"; print " (修正・削除可)
$tmp$date
タイトル\n"; print "\n"; print "
先頭画像
イメージ$ic_alt"; $icmsg = "再選択"; } else { print ""; $icmsg = "アイコンを選択"; } print "  "; print ""; print " (画像の参照はクリアされます)\n"; print "
メッセージ
画 像 $gfc
画像の数を変更したいときは、掲示板に戻って変更してください
削除キー"; print "\n"; print "(英数字で8文字以内。自分の記事を修正・削除できて便利です)\n"; print "
文字色\n"; } else { # 日記帳対応 管理者投稿修正画面 print "
\n"; print "\n"; # print "(この記事の修正・削除の時は、現在の管理パスワードが削除キーとなります)\n"; print "
文字色\n"; } # クッキーの色情報がない場合 if ($c_color eq "") { $c_color = $COLORS[0]; } foreach (0 .. $#COLORS) { if ($c_color eq "$COLORS[$_]") { $checked = " checked"; } else { $checked = ""; } print ""; print "\n"; } print "
\n"; print "
\n\n\n"; exit; } #----------------# # デコード処理 # #----------------# sub decode { $len = $ENV{'CONTENT_LENGTH'}; if ($len >= $cgi_lib'maxdata) { # ● $len2 = int ($len / 1024); $maxkb = int ($cgi_lib'maxdata / 1024); &error("現在の添付画像の合計が、$len2Kバイトです。
$maxkbKバイト以上ですのでアップロードできません","lock"); } &ReadParse; while (($key,$val) = each %in) { if ($val ne "") { $acc_timing_flg = 1; } # 閲覧時一度のタイミング $gf_chk = substr($key,0,6); if ($gf_chk ne "upfile") { # シフトJISコードに変換 &jcode'convert(*val, "sjis", "", "z"); # タグ処理 if ($tagkey) { $val =~ s/<>/<>/g; } else { $val =~ s//>/g; } # 改行処理 # ●管理メッセージ追加 if ($key eq "comment" || $key eq "kmsg") { $val =~ s/\r\n/
/g; $val =~ s/\r/
/g; $val =~ s/\n/
/g; } else { $val =~ s/\r//g; $val =~ s/\n//g; } if ($key eq "name" || $key eq "sub") { $val =~ s/"/'/g; } } $in{$key} = $val; } $mode = $in{'mode'}; $page = $in{'page'}; $in{'url'} =~ s/^http\:\/\///; if ($in{'sub'} eq ""){ if ($in{'name'} ne ""){ # 日記帳以前の記事 $in{'sub'} = "無題"; } } # ●画像数 if ($in{'gf_no'}) { $gf_no = $in{'gf_no'}; } # ●追加画像数を変更したときコメント再表示 if ($in{'picnum'} ne "") { if ($in{'day'}) {$gfin_day = $in{'day'};} if ($in{'sub'}) {$gfin_sub = $in{'sub'};} $gfin_com = ""; if ($in{'comment'}) { $gfin_com = $in{'comment'}; $gfin_com =~ s/
/\n/g; } } # ■アイコンBBS if ($in{'icon'} ne "") { $c_icon = $in{'icon'}; } if ($c_icon eq "del_icon") {$c_icon = ""; } } #----------------------------# # 掲示板の使い方メッセージ # #----------------------------# sub howto { if ($tagkey == 0) { $tag_msg = "投稿内容には、タグは一切使用できません。\n"; } else { $tag_msg = "コメント欄には、タグ使用をすることができます。\n"; } $hisu1_msg = "「おなまえ」「コメント」"; $hisu2_msg = "URL、題名"; if ($in_email) { $hisu1_msg .= "「Eメール」"; } else { $hisu2_msg .= "、Eメール"; } if ($in_pwd) { $hisu1_msg .= "「削除キー」"; } else { $hisu2_msg .= "、削除キー"; } $hisu_msg = "記事を投稿する上での必須入力項目は$hisu1_msgです。$hisu2_msgは任意です。"; &header; # [掲示板にもどる] print <<"HTML";
掲示板の利用上の注意

  1. この掲示板はクッキー対応です。1度記事を投稿いただくと、おなまえ、Eメール、URL、削除キーの情報は2回目以降は自動入力されます。(ただし利用者のブラウザがクッキー対応の場合)

  2. 画像などのバイナリーファイルをアップロードすることが可能\です。
    詳細はこちら[画像の投稿方法]

    画像は表\示サイズ(横$MaxWピクセル、縦$MaxHピクセル)を超えると縮小表\示されます。 HTML if ($picresize){ print <<"HTML";
    掲示板ページ下の、「投稿画像の表\示サイズを変更できます」のところで倍率を指定しますと、表\示サイズを変更することができます。(クッキー対応の場合この指定は保存されます)

    HTML } print <<"HTML";

  3. $tag_msg

  4. $hisu_msg

  5. 記事には、半角カナは一切使用しないで下さい。文字化けの原因となります。

  6. 記事の投稿時に「削除キー」にパスワード(英数字で8文字以内)を入れておくと、その記事は次回削除キーによって修正や削除をすることができます。

  7. 記事の保持件数は最大 $max件です。それを超えると古い順に自動削除されます。

  8. 既存の記事に「返信」をすることができます。各記事の上部にある「返信」ボタンを押すと返信用フォームが現れます。

  9. 過去の投稿記事から「キーワード」によって簡易検索ができます。トップメニューの「ワード検索」のリンクをクリックすると検索モードとなります。

  10. 管理者が著しく不利益と判断する記事や他人を誹謗中傷する記事は予\告なく削除することがあります。
HTML exit; } #-------------------------------# # ●複数画像の使い方メッセージ # #-------------------------------# sub howtopic { $maxkb = int ($cgi_lib'maxdata / 1024); if ($maxkb < 1000){ $maxmb = "$maxkb キロバイト"; } else { $maxmb = int ($maxkb / 10); $maxmb = $maxmb / 100; $maxmb .= "メガバイト ($maxkb"."kb)"; } $gf_maxsum = $gf_maxno + 1; if ($gif) { $FILE .= "GIF, "; } if ($jpeg) { $FILE .= "JPEG, "; } if ($png) { $FILE .= "PNG, "; } if ($text) { $FILE .= "TEXT, "; } if ($lha) { $FILE .= "LHA, "; } if ($zip) { $FILE .= "ZIP, "; } if ($pdf) { $FILE .= "PDF, "; } if ($midi) { $FILE .= "MIDI, "; } if ($word) { $FILE .= "WORD, "; } if ($excel) { $FILE .= "EXCEL, "; } if ($ppt) { $FILE .= "POWERPOINT, "; } if ($rm) { $FILE .= "RM, "; } if ($ram) { $FILE .= "RAM, "; } if ($mpeg) { $FILE .= "MPEG, "; } if ($mp3) { $FILE .= "MP3, "; } $FILE =~ s/\, $//; &header; # [掲示板にもどる] print <<"HTML";
改造掲示板
画像を複数アップロード(投稿)する方法

  1. 閲覧者のパソ\コンにある画像やファイルをアップロード(投稿)出来ます。
    ビットマップ(BMP形式)は投稿できませんが、ほとんどの写真はOKです。

    • 添付可能\ファイル : $FILE
    • 最大投稿データ量 : $maxmb
    • 画像は横$MaxWピクセル、縦$MaxHピクセルを超えると縮小表\示されます。

    HTML if ($icon_mode){ # アイコンBBS print <<"HTML";

  2. 自分のパソ\コンの画像もしくはファイルを、合計$gf_maxno個 一度にアップロードすることが可能\です。

    HTML $gdmsg = ""; } else { print <<"HTML";

  3. 自分のパソ\コンの画像を、合計$gf_maxsum個 一度にアップロードすることが可能\です。
    (先頭の画像が1個、コメントの下の追加画像が$gf_maxno個です)

    HTML $gdmsg = "「先頭画像」もしくは"; } if ($gf_no > 1){ # 投稿画像数、初期値 $gdmsg2 = "「画像1」〜「画像$gf_no」"; } else { $gdmsg2 = "「画像1」"; } if ($sizecom1){ $size_msg = "

  4. $sizecom1"; } if ($sizecom2){ $size_msg .= "
    $sizecom2

    "; } else { if ($sizecom1){ $size_msg .= "

    "; } } print <<"HTML"; $size_msg

  5. 画像をアップロードする方法

    • $gdmsg $gdmsg2の右端にある「参照」ボタンを押します。
    • ファイルの選択ウィンドウが開きますので、自分のパソ\コンの中から画像を選んでください。戻ったときにファイルへのパスがセットされています。
    • コメント文を書き込んで「投稿する」ボタンを押すと、画像もアップロードされます。

  6. アップロードされた画像の表\示位置

      HTML if ($icon_mode){ # アイコンBBS print <<"HTML";
    • コメント文の下に横並びで表\示されます。
      数が多い時は、ウィンドウサイズで折り返します。
    HTML } else { print <<"HTML";
  7. 「先頭画像」に画像をセットしますと、コメント文の先頭(左位置)に画像が表\示されます。
    一枚の画像を載せたいときに見やすい位置です。

  8. $gdmsg2に画像をセットしますと、コメント文の下に横並びで表\示されます。
    複数の画像を載せたいときに見やすい位置です。
    HTML } print <<"HTML";

  9. 記事の投稿時に「削除キー」にパスワード(英数字で8文字以内)を入れておくと。後日、削除キーによって記事の修正を行うとにき、投稿画像を削除したり、別の画像をアップロードしなおすことができます。

  10. 複数の画像ファイルの合計データ量は $maxmbまでです。多すぎると画像のセットがクリアされますので手間がかかります。
    失敗しない画像整理の例をご紹介します。



    • 1.新しくフォルダーをつくります。
      2.そこに、アップロードしたいデジタル写真などを、コピーして集めます。
      3.各写真のサイズを変更して、見やすい大きさにします。
      4.エクスプローラーなどで、そのフォルダーのプロパティーをみて、
        合計サイズに余裕のあることを確認します。
      5.その後で、「投稿画像」にセットしていきますと、スムーズで確実です。


  11. 「投稿画像」の入力行数の変更

    • $gdmsg2の数を増やしたいとき、または表\示させたくないときは、「投稿画像の数を変更できます→」から適当な数を選び、その右横の「再表\示」ボタンをおしてください。

    • $gdmsg2が見つからないとき、「画像を10個まで追加できます→」に「現在0個」と表\示されていたら、そこから適当な数を選んで、「再表\示」ボタンをおしてください。

    • 一度設定した、投稿画像の数は記憶されます(ただし利用者のブラウザがクッキー対応の場合)

  12. 記事の保持件数は最大 $max件です。それを超えると古い順に画像も自動削除されます。過去ログで画像を見ることはできません。

  13. 既存の記事に「返信」をする返信用フォームでも、画像を添付できます。

  14. 管理者が不適切と判断する画像もしくはファイル、他人の肖像権にかかわる可能\性のある画像もしくはファイルは予\告なく削除することがあります。
HTML exit; } #------------------# # ワード検索処理 # #------------------# sub find { &header; # [掲示板にもどる] print <<"EOM";
ワード検索

  • 検索したいキーワードを入力し、「条件」「表\示」を選択して「検索」ボタンを押して下さい。
  • キーワードは「半角スペース」で区切って複数指定することができます。

    キーワード: 条件:\n"; print "表\示:\n"; print "
    \n
\n"; # ワード検索の実行と結果表示 if ($in{'word'} ne "") { # 入力内容を整理 $in{'word'} =~ s/ / /g; @pairs = split(/\s+/, $in{'word'}); # ファイルを読み込み @new=(); open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; while () { $flag=0; foreach $pair (@pairs) { if (index($_,$pair) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; } } else { if ($in{'cond'} eq 'AND') { $flag=0; last; } } } if ($flag) { push(@new,$_); } } close(IN); # 検索終了 $count = @new; print "検索結果:$count件\n"; if ($page eq '') { $page = 0; } $end_data = @new - 1; $page_end = $page + $in{'view'} - 1; if ($page_end >= $end_data) { $page_end = $end_data; } $next_line = $page_end + 1; $back_line = $page - $in{'view'}; $enwd = &url_enc($in{'word'}); if ($back_line >= 0) { print "[前の$in{'view'}件]\n"; } if ($page_end ne "$end_data") { print "[次の$in{'view'}件]\n"; } print "[検索やり直し]\n"; foreach ($page .. $page_end) { ($no,$reno,$date,$name,$email,$sub,$com,$url) = split(/<>/, $new[$_]); if ($email) { $name = "$name"; } if ($url) { $url = "<HOME>"; } if ($reno) { $no = "$renoへのレス"; } # 結果を表示 print "
[$no] $sub"; print " 投稿者:$name 投稿日:$date $url
\n"; print "
$com
\n"; } print "
\n"; } print "\n"; exit; } #---------------------------------# # ブラウザを判断:フォーム幅調整 # #---------------------------------# sub get_agent { # ブラウザ名を取得 $agent = $ENV{'HTTP_USER_AGENT'}; $nam_wid = $nam_len*2; # おなまえ、Eメール、URLの長さ 初期値25 $sub_wid2 = $sub_len*2; # 題名(タイトル)の長さ 初期値18 if ($sub_wid2 > $nam_wid){ $sub_wid2 = $nam_wid; } $sub_wid = $pic_len*2; # ファイル投稿の長さ 初期値64 $com_wid = $com_len*2; # コメント枠の幅(長さ) 初期値60; $url_wid = 50; $nam_wid2 = 35; # if ($agent =~ /MSIE 3/i) { # $nam_wid = 30; # $sub_wid = 40; # $sub_wid2 =40; # $sub_wid2 = $sub_len*2; # if ($sub_wid2 > $nam_wid){ $sub_wid2 = $nam_wid; } # $com_wid = 50; # $url_wid = 48; # $nam_wid2 = 20; # } else { # $nam_wid = 30; # $sub_wid = 40; # $com_wid = 60; # $url_wid = 70; # $nam_wid2 = 20; # $nam_wid = 50; # $sub_wid = 64; # $sub_wid2 = 28; # $sub_wid2 = $sub_len*2; # if ($sub_wid2 > 46){ $sub_wid2 = 46; } # $com_wid = 60; # $url_wid = 50; # $nam_wid2 = 35; # } # } elsif ($agent =~ /MSIE 4/i || $agent =~ /MSIE 5/i || $agent =~ /MSIE 6/i || $agent =~ /MSIE 7/i) { } #------------------# # クッキーの発行 # #------------------# sub set_cookie { # クッキーは60日間有効 local($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+60*24*60*60); @month=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); $gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $week[$wday],$mday,$month[$mon],$year+1900,$hour,$min,$sec); # ●クッキーで0の判定ができないので、文字"0"に置き換え if ($gf_no == 0) { $gf_no = "0"; } if (!$picresize){ $gf_sz = 1; } if ($c_icon eq "del_icon") {$c_icon = ""; } if (@_[0] eq "") { # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ if (!$reno){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'} . "-" . $c_col_bd . "-" . $c_col_bg; } } else { $tmpcol = $in{'color'}; } $tmpname = &set_cook_kigou2($in{'name'}); $cook="name<>$tmpname\,email<>$in{'email'}\,url<>$in{'url'}\,pwd<>$in{'pwd'}\,icon<>$c_icon\,color<>$tmpcol,gf_no<>$gf_no,gf_sz<>$gf_sz"; if ($p3p_cookie){ print "P3P: CP=\"ADM NOI\"\n"; } # ●P3P対応 print "Set-Cookie: $cookiename=$cook; expires=$gmt\n"; } # ●アイコンBBS ●画像表示サイズ変更 if (@_[0] eq "icset" || @_[0] eq "scope") { # 標準クッキー(に戻す)、再発行 $tmpname = &set_cook_kigou2($c_name); if ( $kiji_bd || $kiji_bg ){ $c_color = $c_color . "-" . $c_col_bd . "-" . $c_col_bg; } $cook="name<>$tmpname\,email<>$c_email\,url<>$c_url\,pwd<>$c_pwd\,icon<>$c_icon\,color<>$c_color,gf_no<>$gf_no,gf_sz<>$gf_sz"; if ($p3p_cookie){ print "P3P: CP=\"ADM NOI\"\n"; } # ●P3P対応 print "Set-Cookie: $cookiename=$cook; expires=$gmt\n"; } if (@_[0] eq "icsel-com") { # アイコン、題名、記事をクッキーに書き込む。 $tmpcom = &set_cook_kigou($in{'comment'}); $tmpname = &set_cook_kigou2($in{'name'}); $tmpday = $in{'day'}; $tmpsub = &set_cook_kigou2($in{'sub'}); # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'}; } $cook="name<>$tmpname\,email<>$in{'email'}\,url<>$in{'url'}\,pwd<>$in{'pwd'}\,icon<>$c_icon\,color<>$tmpcol,gf_no<>$gf_no,gf_sz<>$in{'gf_sz'},day<>$tmpday,sub<>$tmpsub,comment<>$tmpcom"; if ($p3p_cookie){ print "P3P: CP=\"ADM NOI\"\n"; } # ●P3P対応 print "Set-Cookie: $cookiename=$cook; expires=$gmt\n"; } } sub set_cook_kigou { if (@_ ne ''){ local($tmp) = @_; $tmp =~ s/<>/wkakko-kigou/g; # ☆☆ $tmp =~ s/;/semicolon-kigou/g; $tmp =~ s/,/comma-kigou/g; $tmp =~ s/=/equal-kigou/g; # ☆☆ return ($tmp); } else { return (""); } } sub set_cook_kigou2 { if (@_ ne ''){ local($tmp) = @_; $tmp =~ s/</k1-kigou/g; # ☆☆ $tmp =~ s/>/k2-kigou/g; # ☆☆ $tmp =~ s//k2-kigou/g; # ☆☆ $tmp =~ s/;/semicolon-kigou/g; $tmp =~ s/,/comma-kigou/g; $tmp =~ s/=/equal-kigou/g; # ☆☆ $tmp =~ s/"/w-quotation/g; return ($tmp); } else { return (""); } } #------------------# # クッキーを取得 # #------------------# sub get_cookie { local($key, $val, @pairs); @pairs = split(/;/, $ENV{'HTTP_COOKIE'}); foreach (@pairs) { ($key,$val) = split(/=/); $key =~ s/\s//g; $GET{$key} = $val; } @pairs = split(/,/, $GET{$cookiename}); foreach (@pairs) { ($key,$val) = split(/<>/); $COOK{$key} = $val; } $c_name = $COOK{'name'}; $c_name = &get_cook_kigou($c_name); $c_email = $COOK{'email'}; $c_url = $COOK{'url'}; $c_pwd = $COOK{'pwd'}; $c_icon = $COOK{'icon'}; $c_color = $COOK{'color'}; if ( $c_color =~ /-/ ){ # 個別記事の枠色背景色を取り出し ($c_color_ch,$c_col_bd,$c_col_bg) = split(/-/, $c_color); $c_color = $c_color_ch; } # ● if ( $COOK{'gf_no'} || $COOK{'gf_no'} eq "0" ) {$gf_no = $COOK{'gf_no'};} # ●クッキーで0の判定ができないので文字"0"に置き換えた if ($gf_no eq "0") { $gf_no = 0; } # ●投稿画像数を変更して戻ってきた if ($in{'picnum'}) { # if ($in{'picnum'} eq "") { } if ($in{'picnum'} eq "picn00") { $gf_no = 0; } if ($in{'picnum'} eq "picn01") { $gf_no = 1; } if ($in{'picnum'} eq "picn03") { $gf_no = 3; } if ($in{'picnum'} eq "picn05") { $gf_no = 5; } if ($in{'picnum'} eq "picn10") { $gf_no = 10; } } if ($COOK{'gf_sz'}) {$gf_sz = $COOK{'gf_sz'};} else { $gf_sz = 1; } if ($in{'gf_sz'}) { $gf_sz = $in{'gf_sz'}; } # ●投稿画像表示サイズを変更して戻ってきた if ($in{'picsize'}) { if ($in{'picsize'} eq "pics04") { $gf_sz = 0.4; } if ($in{'picsize'} eq "pics06") { $gf_sz = 0.6; } if ($in{'picsize'} eq "pics08") { $gf_sz = 0.8; } if ($in{'picsize'} eq "pics10") { $gf_sz = 1.0; } if ($in{'picsize'} eq "pics13") { $gf_sz = 1.3; } if ($in{'picsize'} eq "pics17") { $gf_sz = 1.7; } if ($in{'picsize'} eq "pics20") { $gf_sz = 2.0; } if ($in{'picsize'} eq "pics25") { $gf_sz = 2.5; } if ($in{'picsize'} eq "pics30") { $gf_sz = 3.0; } } if ($in{'name'}) { $c_name = $in{'name'}; } if ($in{'email'}) { $c_email = $in{'email'}; } if ($in{'url'}) { $c_url = $in{'url'}; } if ($in{'pwd'}) { $c_pwd = $in{'pwd'}; } if ($in{'icon'}) { $c_icon = $in{'icon'}; } if ($c_icon eq "del_icon") {$c_icon = ""; } if ($in{'color'}) { $c_color = $in{'color'}; } if ($in{'color_bd'}) { $c_col_bd = $in{'color_bd'}; } if ($in{'color_bg'}) { $c_col_bg = $in{'color_bg'}; } # ■アイコン選択の時にコメントを復活 if ($mode eq "imgset" || $mode eq "resimgset") { # ■アイコンを選択して戻ってきた if ($COOK{'comment'}) {$gfin_com = $COOK{'comment'};} if ($COOK{'day'}) {$gfin_day = $COOK{'day'};} if ($COOK{'sub'}) {$gfin_sub = $COOK{'sub'};} $gfin_com = &get_cook_kigou($gfin_com); } $gfin_sub = &get_cook_kigou2($gfin_sub); $c_name = &get_cook_kigou2($c_name); } sub get_cook_kigou { # コメント if (@_ ne ''){ local($tmp) = @_; $tmp =~ s/
/\n/g; $tmp =~ s/wkakko-kigou/<>/g; # ☆☆ $tmp =~ s/semicolon-kigou/;/g; # ☆☆ $tmp =~ s/comma-kigou/,/g; $tmp =~ s/equal-kigou/=/g; # ☆☆ return ($tmp); } else { return (""); } } sub get_cook_kigou2 { # 名前、題名 if (@_ ne ''){ local($tmp) = @_; $tmp =~ s/k1-kigou/</g; # ☆☆ $tmp =~ s/k2-kigou/>/g; # ☆☆ $tmp =~ s/semicolon-kigou/;/g; # ☆☆ $tmp =~ s/comma-kigou/,/g; $tmp =~ s/equal-kigou/=/g; # ☆☆ $tmp =~ s/w-quotation/'/g; return ($tmp); } else { return (""); } } #--------------# # エラー処理 # #--------------# sub error { &unlock if ($lockflag); &header if (!$head_flag); print "

ERROR !

\n"; print "$_[0]\n"; # ● 追加 if ($_[0] =~ /Open Error/){ print "

ファイルが開けません。管理者は、こちらからファイルチェックを行ってください。\n";} print "

$ver\n"; print "


\n"; print "\n"; exit; } #--------------# # 管理モード # #--------------# sub admin { if ($in{'pass'} eq "" && $in{'pass2'} eq "" && $in{'pass3'} eq "") { &header; if ($diary){ # 日記帳対応 print "[戻る 日記管理モードはOFF]

\n"; } else { print "[戻る]

\n"; } print "

管理ページ

\n"; print "管理パスワードを入力して下さい

\n"; print ""; print "\n"; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print ""; # print ""; # print ""; # print ""; print "
"; print "

管理処理(記事削除など)

\n"; print "
"; print "
\n"; print "\n"; print "\n"; print ""; print "\n"; print "
"; print "

先頭メッセージ入力

\n"; print "
"; print ""; print "\n"; print "\n"; print "
"; print "

アイコン選択ページの編集

\n"; print "
"; print "
\n"; print "\n"; print ""; print "\n"; print "
\n"; print "
"; print "

各種項目の設定

<各種項目の設定とディレクト等のチェック>

 項目設定プログラムを呼び出します
\n"; print "
"; print "
\n"; print "\n"; print "
\n"; print "
"; # print "


ファイルチェック

<ディレクトリ・ファイルのチェック>
\n"; # print "
"; # print "
\n"; # print "\n"; # print "\n"; # print ""; # print "\n"; # print "
\n"; # print "
"; print "


JOYFULYY のバージョンアップ情報
\n"; print "


\n"; print "―\ $ver ―\\n"; print "
\n"; exit; } if ($in{'pass'} ne "" && $in{'pass'} ne $pass) { &error("パスワードが違います"); } if ($in{'pass2'} ne "" && $in{'pass2'} ne $pass) { &error("パスワードが違います"); } if ($in{'pass3'} ne "" && $in{'pass3'} ne $pass) { &error("パスワードが違います"); } if ($in{'pass2'} ne "") { # ●管理用先頭メッセージを表示 &admin2; exit; } if ($in{'pass3'} ne "") { # ●ファイルチェック ✓ exit; } &header; print "[掲示板に戻る]  (now counter:\n"; &counter2; print ")\n"; print "
\n"; print "管理モード\n"; print "
\n"; # 画像許可 if ($in{'chk'}) { @CHK = split(/\0/, $in{'chk'}); # ロック処理 if ($lockkey) { &lock; } # 許可情報をマッチングし更新 @new=(); open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; while () { # ●複数画像対応 # ($no,$reno,$d,$n,$m,$s,$com,$u,$ho,$p,$c,$t,$w,$h,$chk) # = split(/<>/); chop $_; &inperm4; # 入力変数セット、入力処理 $gf_tmp = $_; foreach $xx (@CHK) { if ($no eq $xx) { # $_ = "$no<>$reno<>$d<>$n<>$m<>$s<>$com<>$u<>$ho<>$p<>$c<>$t<>$w<>$h<>1<>\n"; $gf_tmp = "$no<>$reno<>$d<>$n<>$m<>$s<>$com<>$u<>$ho<>$p<>$c"; # 先頭画像は無条件で添付 $gf_tmp .= "<>$gf_tail[0]<>$gf_w[0]<>$gf_h[0]<>1"; foreach $gfc (1 .. $gf_maxno) { if (length $gf_tail[$gfc] > 1) { $gf_tmp .= "<>$gf_tail[$gfc]<>$gf_w[$gfc]<>$gf_h[$gfc]"; } } $gf_tmp .= "<>"; last; } } $gf_tmp .= "\n"; push(@new,$gf_tmp); } close(IN); # 更新 unshift(@new,$top); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); # ロック解除 if ($lockkey) { &unlock; } } # 削除処理 if ($in{'del'}) { @DEL = split(/\0/, $in{'del'}); # ロック処理 if ($lockkey) { &lock; } # 削除情報をマッチングし更新 @new=(); open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; while () { $flag=0; # ($no,$reno,$d,$n,$m,$s,$com,$u,$ho,$p,$c,$tail,$w,$h,$chk) # = split(/<>/); &inperm4; # 入力変数セット、入力処理 foreach $del (@DEL) { if ($no eq $del || $reno eq $del) { # ●複数画像削除 # if (-e "$ImgDir$no$tail") { # unlink("$ImgDir$no$tail"); # } foreach $gfc ($upfst .. $gf_maxno) { $tail = $gf_tail[$gfc]; if ($tail eq "" ) { next; } if (-e "$ImgDir$del\_$gfc$tail") { unlink("$ImgDir$del\_$gfc$tail"); } } $flag=1; last; } } if ($flag == 0) { push(@new,$_); } } close(IN); # 更新 unshift(@new,$top); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); # ロック解除 if ($lockkey) { &unlock; } } # 管理を表示 if ($page eq "") { $page = 0; } print "
\n"; print "

\n
    \n"; print "
  • 記事を削除する場合は「削除」のチェックボックスにチェックを入れ「送信する」を押して下さい。\n"; print "
  • 画像許可を行なう場合は「画像許可」のチェックボックスにチェックを入れ「送信する」を押して下さい。\n"; print "
\n
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "

\n"; print ""; print ""; print "\n"; $line=9; if ($ImageCheck) { print ""; $line=10; } print "\n"; open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; $i=0; $num1 = 0; $num2 = 0; while () { $img_flag=0; # ($no,$reno,$date,$name,$mail,$sub,$com, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); &inperm3; # 入力変数セット、入力処理 if ($mail) { $name="$name"; } if ( $date =~ /\(/ ){ ($date,$dmy) = split(/\(/, $date); } if ($url) { $url = "<Home>"; } else { $url = '-'; } $com =~ s/
//ig; $com =~ s//>/g; if (length($com) > 40) { $com = substr($com,0,38); $com .= "..."; } $sub =~ s/
//ig; $sub =~ s//>/g; if (length($sub) > 20) { $sub = substr($sub,0,18); $sub .= "..."; } # ●複数画像 $clip = ""; $size = 0; foreach $gfc ($upfst .. $gf_maxno) { $tail = $gf_tail[$gfc]; if (-e "$ImgDir$no\_$gfc$tail") { if ($tail eq ".gif" || $tail eq ".jpg" || $tail eq ".png") { $img_flag = 1; $File = "画像"; } else { $File = "File"; } $gf_pass = "$ImgUrl$no\_$gfc$tail"; $clip .= "$File "; # $size = -s "$ImgDir$no$tail"; $size += -s "$ImgDir$no\_$gfc$tail"; } } $all += $size; if ($reno eq "") { # 親記事 print "
\n"; $num1 ++; # 親記事数 } else { $num2 ++; # レス記事数 } # チェックボックス print ""; print ""; print ""; print ""; print "\n"; # 画像許可 if ($ImageCheck) { if ($img_flag == 1 && $chk == 1) { print ""; } elsif ($img_flag == 1 && $chk != 1) { print ""; } else { print ""; } } print "\n"; } close(IN); print "\n"; print "
削除記事NO投稿日タイトル投稿者URLコメントホスト名画像
(bytes)
画像
許可

$no$date$sub$name$url$com$host$clip
($size)
OK

\n"; $num = $num1 + $num2; $all = int ($all / 1024); if ($all < 1000){ $allcmt = "$all キロバイト"; } else { $allcmt = int ($all / 100); $allcmt = $allcmt / 10; $allcmt .= "メガバイト ($all"."kb)"; } print "【 記事総数:$num (内親記事数:$num1 ) / 最大記事数設定:$max 】 . 【 添付データ総量:$allcmt 】\n"; print "
\n"; print "\n"; exit; } #--------------------------# # ●管理:先頭メッセージ # #--------------------------# sub admin2 { if (!(-e $kanrifile)) { &ad_mk_file; } # ●管理用先頭メッセージを書込み if ($in{'action'} eq "edit") { undef @new; open(IN,"$kanrifile") || &error("Open Error : $kanrifile icK01"); if ($in{'kmsg_border'} == 0 ){ $in{'kmsg_border'} = "zero"; } push(@new,"kmsg_color<>$in{'color'}<>$in{'color_bd'}<>$in{'color_bg'}<>$in{'kmsg_border'}<>\n"); push(@new,"kmsg<>$in{'kmsg'}\n"); while () { # 管理用先頭メッセージ以外を保存 v2.45 chop $_; ($c1) = split(/<>/); if ($c1 ne "kmsg_color" && $c1 ne "kmsg") { push(@new,"$_\n"); } } close(IN); open(OUT,">$kanrifile") || &error("Write Error : $kanrifile 01"); print OUT @new; close(OUT); # ●管理用先頭メッセージ編集 } else { &header; print "[掲示板に戻る]  (now counter:\n"; &counter2; print ")\n"; print "
\n"; print "管理モード\n"; print "
\n"; if ($in{'pass2'} eq "" || $in{'pass2'} ne $pass) { &error("パスワードが違います"); } open(IN,"$kanrifile") || &error("Open Error : $kanrifile k02"); # $kmsg_color = ; # chop $kmsg_color; # $kmsg = ""; while () { chop $_; ($c1,$c2) = split(/<>/); if ($c1 eq "kmsg_color") { ($c1,$c2,$c3,$c4,$c5) = split(/<>/); if ($c2){ $kmsg_color = $c2; } else { $kmsg_color = $COLORS[0]; } if ($c3){ $kmsg_bd = $c3; } elsif ( $kmsg_bd eq "" ){ $kmsg_bd = $kmsg_bordercol; } # v2.46x3 までの項目設定$kmsg_bordercolは独自色として有効。 if ($c4){ $kmsg_bg = $c4; } elsif ( $kmsg_bg eq "" ){ $kmsg_bg = $kmsgbgcl; } # v2.46x3 までの項目設定$kmsgbgclは独自色として有効。 if ($c5){ $kmsg_border = $c5; if ( $kmsg_border eq "zero" ) { $kmsg_border = 0; } } elsif ( $kmsg_border eq "" ){ $kmsg_border = 1; } # v2.50より管理メッセージ枠の追加($kmsg_border) } if ($c1 eq "kmsg") { # if ($autolink) { &auto_link($_); } $c2 =~ s/
/\r/g; $c2 =~ s/<//g; $c2 =~ s/"/\"/g; # print "$_
\n"; $kmsg = $c2; } } close(IN); print "
\n"; print <<"EOM";

管理用先頭メッセージ

EOM print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
 管理メッセージ
の独自色
規定の選択色
文字色 \n"; # クッキーの色情報がない場合 foreach (0 .. $#COLORS) { if ($kmsg_color eq "$COLORS[$_]") { $checked = " checked"; } else { $checked = ""; } if ($_ == 0 && $kmsg_color eq "") { $checked = " checked"; } # 値のないとき print ""; print "\n"; } print "
枠 色\n"; $checked = ""; $checked_flg = 0; if ($kmsg_bd eq $kmsg_bordercol) { $checked = " checked"; $checked_flg = 1;} if ($kmsg_bd eq "") { $checked = " checked"; $checked_flg = 1;} # 値のないとき print "\n"; print "\n"; foreach (0 .. $#COLORSBD) { $checked = ""; if (!$checked_flg && $kmsg_bd eq "$COLORSBD[$_]" ){ $checked = " checked"; $checked_flg = 1; } print ""; print "\n"; } print "
背景色\n"; $checked = ""; $checked_flg = 0; if ($kmsg_bg eq $kmsgbgcl) { $checked = " checked"; $checked_flg = 1;} if ($kmsg_bg eq "") { $checked = " checked"; $checked_flg = 1;} # 値のないとき print "\n"; print "\n"; foreach (0 .. $#COLORSBG) { $checked = ""; if (!$checked_flg && $kmsg_bg eq "$COLORSBG[$_]" ){ $checked = " checked"; $checked_flg = 1; } print ""; print "\n"; } if ( $kmsg_border eq "zero" ) { $kmsg_border = 0; } if ( $kmsg_border eq "" ) { $kmsg_border = 1; } print "
枠 幅\n"; print "\n"; print " ( 0 にすると枠がなくなります)
\n"; print "

\n"; print "\n"; print "

"; exit; } } # ●管理データ読み込み、先頭メッセージ・アイコン sub ad_rd_all { # 掲示板ページ表示 if (!(-e $kanrifile)) { &ad_mk_file; } open(IN,"$kanrifile") || &error("Open Error : $kanrifile K01"); while () { chop $_; ($c1,$c2) = split(/<>/); if ($c1 eq "kmsg_color") { ($c1,$c2,$c3,$c4,$c5) = split(/<>/); if ($c2){ $kmsg_color = $c2; } elsif ( $kmsg_color eq "" ){ $kmsg_color = $COLORS[0]; # 念のため } if ($c3){ $kmsg_bd = $c3; } elsif ( $kmsg_bd eq "" ){ $kmsg_bd = $kmsg_bordercol; } # v2.46x3 までの項目設定$kmsg_bordercolは独自色として有効。 if ($c4){ $kmsg_bg = $c4; } elsif ( $kmsg_bg eq "" ){ $kmsg_bg = $COLORSBG[0]; } # v2.46x3 までの項目設定$kmsgbgclは独自色として有効。 if ($c5){ $kmsg_border = $c5; if ($kmsg_border eq "zero"){ $kmsg_border = 0; } } elsif ( $kmsg_border eq "" ){ $kmsg_border = 1; } # v2.50より管理メッセージ枠の追加($kmsg_border) } if ($c1 eq "kmsg") { if ($autolink) { &auto_link($c2); } $kmsg = $c2; } if ($c1 eq "icdata") { # アイコンタイトル ($c1,$c2,$c3,$c4) = split(/<>/); $icnotb4{$c2} = "$c3<>$c4"; $kanri_flg = 1; } } close(IN); } # ●アイコン表示順にソート sub ad_sort_ic { # !共通サブ # 先ずアルファベット順にソート @ic_exist = sort @ic_exist; # 管理デーが無い場合はこのまま if ($kanri_flg){ # 管理デーがある # アイコン表示順テーブルを作る undef @keys; foreach (@ic_exist){ # ソート準備 if ($icnotb4{$_} ne ""){ # 管理データ ($ittl,$ino) = split(/<>/, $icnotb4{$_}); if ($ino){ push(@keys,$ino); # 指定順NO. } else { push(@keys,"99999"); # 無指定 } } else { push(@keys,"99999"); # 無指定 } } # 順NO.でソート sub bykeys { $keys[$a] <=> $keys[$b]; } @ic_exist = @ic_exist[ sort bykeys 0..$#ic_exist ]; } } # ●タイトル読み出し sub ad_ic_ttl { # !共通サブ $k_title = ""; if ($kanri_flg){ # 管理デーがある if (@_[0]){ # $inm = @_[0]; if ($icnotb4{@_[0]} ne ""){ # このアイコンの管理データ ($ittl,$ino) = split(/<>/, $icnotb4{$inm}); if ($ittl){ $k_title = $ittl; } } } } } sub ad_mk_file { # !共通サブ # ●管理用ファイル open(OUT,">$kanrifile") || &error("Write Error : $kanrifile : make file error"); # print OUT ""; close(OUT); chmod (0666,$kanrifile); } #------------------# # ユーザ記事削除 # #------------------# sub usr_del { if ($diary){ # 日記帳対応 if ($in{'pwd'} eq '') { $in{'pwd'} = $in{'kpass'}; } # 無指定では管理パスワード } if ($in{'pwd'} eq ''){ &error("記事Noまたは削除キーが入力モレです"); } # ロック処理 if ($lockkey) { &lock; } open(IN,"$logfile") || &error("Open Error : $logfile"); @lines = ; close(IN); $top = shift(@lines); $flag=0; foreach (@lines) { # ($no,$reno,$date,$name,$mail,$sub,$com, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); &inperm3; # 入力変数セット、入力処理 if ($flag == 0 && $in{'no'} eq "$no") { if ($pw eq '') { &error("該当記事には削除キーが設定されていません"); } # 削除キーを照合 $match = &decrypt("$in{'pwd'}","$pw"); if ($match ne 'yes') { if ($in{'kpass'}){ # 日記帳モード、日記帳以前の記事ならパスワードを入れなおす。 if ($name ne ""){ # 日記帳以前の通常の記事 &usr_diarypwdchk; } # 日記帳の記事は、管理パスワードチェック済み } else { # 通常 if ($name ne ""){ # 通常の記事 &error("パスワード(削除キー)が違います <usr_del>"); } else { # 日記帳の記事 &error("これは日記帳の記事です。
この記事を投稿した時の管理パスワードを入れてください <usr_del_diary>"); } } } # ●複数画像削除 # if (-e "$ImgDir$no$tail") { unlink("$ImgDir$no$tail"); } foreach $gfc ($upfst .. $gf_maxno) { $tail = $gf_tail[$gfc]; if ($tail eq "" ) { next; } if (-e "$ImgDir$no\_$gfc$tail") { unlink("$ImgDir$no\_$gfc$tail"); } } if ($reno eq "") { $flag=2; } else { $flag=1; } } elsif ($flag == 2 && $in{'no'} eq "$reno") { if (-e "$ImgDir$no$tail") { unlink("$ImgDir$no$tail"); } next; } else { push(@new,$_); } } if ($flag == 0) { &error("該当記事が見当たりません"); } # 更新 unshift(@new,$top); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); # ロック解除 if ($lockkey) { &unlock; } } #----------------# # 記事修正処理 # #----------------# sub usr_edt { # &error("edtok?,$mode,$in{'no'},$c_icon,sel,$select_icon$in{'pwd'}"); if ($in{'imageselect'}) { # ■アイコンを選択したので、アイコン選択ページへ &image("edtimgset","$in{'no'}","$c_icon"); } if ($in{'icon'}) { # ■アイコンを選択して戻ってきた $select_icon = $in{'icon'}; } # ■修正で画像追加の時、アイコンをリレーする if ( $in{'select_icon'}) { $select_icon = $in{'select_icon'}; } if ($in{'kpass'}){ # 日記帳対応 if ($in{'pwd'} eq '') { $in{'pwd'} = $in{'kpass'}; } # 無指定では管理パスワード } if ($in{'no'} eq '' || $in{'pwd'} eq '') { &error("記事Noまたはパスワードが入力モレです"); } if ($in{'action'} eq "edit") { # フォーム入力チェック &form_check; # ロック処理 &lock if ($lockkey); } # ●? &get_cookie; $flag=0; open(IN,"$logfile") || &error("Open Error : $logfile"); $top = ; while () { # ($no,$reno,$date,$name,$mail,$sub,$com, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); &inperm3; # 入力変数セット、入力処理 if ($in{'no'} == $no) { $pw2 = $pw; if ($name eq ""){ $diary_kiji = 1; } else { $diary_kiji = 0; } # 日記帳? $flag=1; # ■アイコン画像があれば■アイコンを選択(モードは関係なし) if (!$select_icon) { if ((length $gf_tail[0] > 1) and !($gf_tail[0] =~ /^\./)) { $select_icon = $gf_tail[0]; } } if ($in{'action'} ne "edit") { last; } if ($in{'action'} eq "edit") { # ●複数画像ログ更新 # $_ = "$no<>$reno<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$pw<>$in{'color'}<>$chk<>$tail<>$w<>$h<>\n"; if ($in{'name'} eq ""){ $date = $in{'day'}; } # 日記帳日付 # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'}; } $_ = "$no<>$reno<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$pw<>$tmpcol"; # 先頭画像は無条件で添付 # ■アイコン画像があればアイコンを保存する(モードは関係なし) if ($select_icon) { if ($select_icon eq "del_icon") { $_ .= "<><><><>$chk"; } else { $_ .= "<>$select_icon<><><>$chk"; } } else { $_ .= "<>$gf_tail[0]<>$gf_w[0]<>$gf_h[0]<>$chk"; } # 投稿画像情報 $gf_smax = 0; foreach $gfc (1 .. $gf_maxno) { if ( length $gf_tail[$gfc] >1 ) { $gf_smax = $gfc; } } if ($gf_smax >= 1) { foreach $gfc (1 .. $gf_smax) { if ( length $gf_tail[$gfc] >1 ) { $_ .= "<>$gf_tail[$gfc]<>$gf_w[$gfc]<>$gf_h[$gfc]"; } else { $_ .= "<><><>"; } } } $_ .= "<>\n"; } } if ($in{'action'} eq "edit") { push(@new,$_); } } close(IN); if (!$flag) { &error("該当の記事が見当たりません"); } if ($pw2 eq "") { &error("パスワードが設定されていません"); } $check = &decrypt("$in{'pwd'}", "$pw2"); if ($check ne "yes") { if ($in{'kpass'}){ # 日記帳モード、日記帳以前の記事ならパスワードを入れなおす。 if (!$diary_kiji){ # 日記帳以前の通常の記事 &usr_diarypwdchk; } # 日記帳の記事は、管理パスワードチェック済み } else { # 通常 if (!$diary_kiji){ # 通常の記事 &error("パスワード(削除キー)が違います <usr_edt>"); } else { # 日記帳の記事 &error("これは日記帳の記事です。
この記事を投稿した時の管理パスワードを入れてください <usr_edt_diary>"); } } } if ($in{'action'} eq "edit") { # ●複数画像修正処理 &usr_edt_pic_up; # ログ出力 unshift(@new,$top); open(OUT,">$logfile") || &error("Write Error : $logfile"); print OUT @new; close(OUT); &unlock if ($lockkey); &get_time; # 時間を取得 &set_cookie; if ($in{'url'}) { $in{'url'} = "http://$in{'url'}"; } if ($in{'email'}) { $in{'email'} = "$in{'email'}"; } &header; print "
\n"; print "- 以下のとおり修正が完了しました -\n"; if ($select_icon) { if ($select_icon eq "del_icon") { print "

アイコン取り消し\n"; } else { print "

$select_icon\n"; } } print "

\n"; if ($in{'name'} ne ""){ print "おなまえ:$in{'name'}
\n"; print "Eメール:$in{'email'}
\n"; } if ($in{'day'}){ # 日記帳記事 print "日 付:$in{'day'}
\n"; } if ($in{'name'} ne "" || ($in{'name'} eq "" && $diary_title)){ print "題 名:$in{'sub'}
\n"; } if ($in{'name'} ne ""){ print "URL:$in{'url'}\n"; } print "

\n"; print "$in{'comment'}\n"; print "

\n"; print "

\n"; if ($in{'kpass'}){ # 日記帳対応 print "\n"; } print "\n"; print "

\n"; print "

画像はリストに戻ってからご確認ください
\n"; print "

なお、ファイルを置き換えて掲示板に戻った時に、ブラウザが古い画像を表\示することがあります。
\n"; print "その時は、ブラウザの再読み込みをしてください。\n"; print "

\n"; print "

\n\n\n"; exit; } &get_agent; $com =~ s/
/\r/g; $com =~ s/<//g; &header; #

if ($in{'kpass'}){ # 日記帳対応 print "\n"; print "\n"; print "
\n"; } else { print "[戻る]

\n"; } print <<"EOM";

*** 記事の修正 ***
EOM if ($in{'kpass'}){ # 日記帳対応 print "\n"; } if ($name ne ""){ $diary_kiji = 0; }# 通常の記事 if ($name eq ""){ $diary_kiji = 1; }# 日記帳の記事 print "\n"; if ($select_icon || $icon_mode) { # ■アイコンBBS print "
"; print ""; print "\n"; if ($select_icon && $select_icon ne "del_icon") { print "
 イメージアイコンの変更   "; # ●管理データ読み込み、先頭メッセージ・アイコン &ad_rd_all; &ad_ic_ttl($select_icon); if ($k_title eq ""){ $ic_alt = $select_icon; } else { $ic_alt = $k_title; } print "$ic_alt\n"; $icmsg = "再選択"; } else { print "   "; $icmsg = "アイコンを選択"; } print "  "; print "\n"; print "
\n"; print " アイコンの変更は先に行ってください。その後、この下の変更をしてください。\n"; } print "
\n"; if ($name eq ""){ # 日記帳の記事 if (!$diary){ # 通常モードで日記帳の記事を修正している print "

\n"; print "
\n"; print "<これは、日記帳の記事です 現在の管理パスワードが必要です>
\n"; print "管理者用 \n"; print "

\n"; } } print "

- 変更する部分のみ修正して送信ボタンを押して下さい -

\n"; print "\n"; if ($name ne ""){ # 通常の記事 print "\n"; print "\n"; print "\n"; print "\n"; } if ($name eq ""){ # 日記帳の記事 print "\n"; if ($diary_day > 0){ &con_week; print "\n"; # } elsif ($diary_day > 1) { # if ($diary_day ==2){ $tmp = "日付 "; } # if ($diary_day ==3){ $tmp = "日時 "; } # print "\n"; # print "\n"; } if ($diary_title){ $sub =~ s/
//ig; $sub =~ s//>/g; $sub =~ s/\"/"/g; $tmplen = 60; # $diary_sub_len * 2; print "\n"; } } else { # 通常の記事 print "\n"; print "\n"; } print "\n"; print "
おなまえ
Eメール\n"; print "
URL\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "
日  付\n"; print "\n"; print " (修正・削除可)
$tmp$date
題  名\n"; print "\n"; print "
題  名 \n"; print "\n"; print " \n"; print "
コメント
\n"; $tmplen = $formcomcnt + 3; print "\n"; print "
文字色
\n"; # 記事枠色、記事背景色を取り出す v2.47より if ( $color =~ /-/ ){ # 個別記事の枠色背景色を取り出し ($color_ch,$col_bd,$col_bg) = split(/-/, $color); $color = $color_ch; if ($color eq "") { $color = $COLORS[0]; } if ($color !~ /^#/){ $color = "#".$color; } # 他のログ形式対応 if ($col_bd ne "" && $col_bd !~ /^#/){ $col_bd = "#".$col_bd; } if ($col_bg ne "" && $col_bg !~ /^#/){ $col_bg = "#".$col_bg; } } if ( !$reno ){ if ( $kiji_bd || $kiji_bg ){$tm1 = ""; $tm2 = "";} else {$tm1 = ""; $tm2 = "";} } $chkflg = 0; foreach (0 .. $#COLORS) { if ($color eq "$COLORS[$_]") { $checked = " checked"; $chkflg = 1; } else { $checked = ""; } print ""; print "$tm1■$tm2\n"; } if ( !$chkflg ){ print ""; print "$tm1■$tm2\n"; } if ( !$reno ){ # 記事枠色、記事背景色 if ( $kiji_bd ){ print "
枠 色\n"; $chkflg = 0; foreach (0 .. $#COLORSBD) { if ($col_bd eq "$COLORSBD[$_]") { $checked = " checked"; $chkflg = 1; } else { $checked = ""; } print ""; print "\n"; } if ( !$chkflg && $col_bd ne "" ){ print ""; print "\n"; } } else { # クッキー値 print "\n"; } if ( $kiji_bg ){ print "
背景色\n"; $chkflg = 0; foreach (0 .. $#COLORSBG) { if ($col_bg eq "$COLORSBG[$_]") { $checked = " checked"; $chkflg = 1; } else { $checked = ""; } print ""; print "\n"; } if ( !$chkflg && $col_bg ne "" ){ print ""; print "\n"; } } else { # クッキー値 print "\n"; } } print "
\n"; # ●修正での複数画像表 &usr_edt_pic; print "

\n"; print "\n\n"; exit; } #--------------------------------# # 日記帳記事パスワードチェック # #--------------------------------# sub usr_diarypwdchk { &header; print "
\n"; print "- 記事No \"$in{'no'}\"のパスワード(削除キー)を入れてください -
\n"; print "
\n"; print "この記事は日記帳の記事ではなく、掲示板の記事です。
\n"; print "この記事を投稿したときのパスワード(削除キー)を入れてください。
\n"; print "

\n"; print "パスワード(削除キー)\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; exit; } #--------------------------# # ●修正での複数画像表示 # #--------------------------# sub usr_edt_pic { print "

\n"; print "

●空き番があっても、画像は詰めて表\示されます。
\n"; print "●ファイルを置き換えたとき、ブラウザが一時的に古い画像を表\示していることがありますので、
\n"; print " 出来るだけ、空いているところに新しい画像を設定し、古い画像は削除することをお勧めします。\n"; # ●記事修正での複数画像の表示 foreach $gfc ($upfst .. $gf_maxno) { # 追加の添付ファイルの数ではなく、最大数を調べる print "

"; if ($gfc == 0 ) { # 先頭画像 print " "; } else { print " "; } $tail = $gf_tail[$gfc]; if ( length $tail <= 1 ) {print ""; } else { # $w = $gf_w[$gfc]; # $h = $gf_h[$gfc]; if (-e "$ImgDir$no\_$gfc$tail") { $gf_pass = "$ImgUrl$no\_$gfc$tail"; if ($tail eq ".gif" || $tail eq ".jpg" || $tail eq ".png") { $tmp = "$ImgDir$no\_$gfc$tail"; &UpFile_size($tmp); # 画像実サイズ取得 $W, $H $w = ""; $h = ""; # 画像表示用縮小サイズ $MaxW = 200; $MaxH = 200; # 管理用サイズ if ($W > $MaxW || $H > $MaxH) { $W2 = $MaxW / $W; $H2 = $MaxH / $H; if ($W2 < $H2) { $key = $W2; } else { $key = $H2; } $w = int ($W * $key) || 1; $h = int ($H * $key) || 1; } if ( $picpopup ){ # ☆ print "\n"; } else { print "\n"; } } else {print ""; } } # ● 添付画像、入力フォームを指定数追加 # サイズ限定 if ( length $tail > 1 ) { print ""; print "\n"; } print "
先頭画像投稿画像$gfcなし"; } else { print ""; } $gf_bod = 0; if ($w && $h ){ if ( $picbod ) { if ( $W >= $MaxW ) { $gf_bod = 1; } # 横幅 if ( $H >= $MaxH ) { $gf_bod = 1; } # 縦幅 } $gf_wh = " width=$w height=$h"; } else { $gf_wh = ""; } print "

Download:$no\_$gfc$tail $no\_$gfc$tail

$ImgDir$no\_$gfc$tail
ファイルが見つかりません
ご連絡ください。
削除する(ファイルの置き換えの時は必要ありません)\n"; print "

ファイルを置き換える
\n"; } else { print "

ファイルを追加する
\n"; } print ""; print "

"; } #----------------------------------# # ●修正での複数画像アップロード # #----------------------------------# sub usr_edt_pic_up { # ●複数画像削除チェック # if (-e "$ImgDir$no$tail") { unlink("$ImgDir$no$tail"); } $gfs_delflg = 0; foreach $gfc ($upfst .. $gf_maxno) { $gf_chkboxflg[$gfc] = 0; $gf_tmp = "syudel$gfc"; if ($in{$gf_tmp}) { $gf_chkboxflg[$gfc]=1; $gfs_delflg = 1; } } # ●複数画像対応 画像更新チェック $gfs_picflag = 0; foreach $gfc ($upfst .. $gf_maxno) { $gf_formflg[$gfc] = 0; $gf_upfile[$gfc] = ""; $gf_tmp = "upfile$gfc"; if ($in{$gf_tmp}) { $gf_formflg[$gfc]=1; $gf_upfile[$gfc] = $in{$gf_tmp}; $gfs_picflag = 1; $gf_new_sn = $gfc; # 新しいアップロードの最終枝番を獲得 } } if ( $gfs_delflg == 1 || $gfs_picflag == 1 ) { # 再度ログを読み直して更新 open(IN,"$logfile") || &error("Open Error : $logfile"); @new=(); $top = ; while () { # ($no,$reno,$date,$name,$mail,$sub,$com, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); &inperm3; # 入力変数セット、入力処理 if ($in{'no'} == $no) { # ●複数画像削除 foreach $gfc ($upfst .. $gf_maxno) { # 新しいアップロード枝番も削除 if ( $gf_chkboxflg[$gfc] == 1 || $gf_formflg[$gfc] == 1 ) { $tail = $gf_tail[$gfc]; if (-e "$ImgDir$no\_$gfc$tail") { unlink("$ImgDir$no\_$gfc$tail"); } } } # ●複数画像対応 画像データ格納、アップロード if ($gfs_picflag == 1) { &UpFile; } # ●複数画像ログ更新 # $_ = "$no<>$reno<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$pw<>$in{'color'}<>$tail<>$w<>$h<>$chk<>\n"; if ($in{'name'} eq ""){ $date = $in{'day'}; } # 日記帳日付 # 記事枠色、記事背景色 if ( $kiji_bd || $kiji_bg ){ $tmpcol = $in{'color'} . "-" . $in{'color_bd'} . "-" . $in{'color_bg'}; } else { $tmpcol = $in{'color'}; } $_ = "$no<>$reno<>$date<>$in{'name'}<>$in{'email'}<>$in{'sub'}<>$in{'comment'}<>$in{'url'}<>$host<>$pw<>$tmpcol"; # 先頭画像は無条件で添付 # ■アイコン画像があればアイコンを保存する(モードは関係なし) if ($select_icon) { if ($select_icon eq "del_icon") { $_ .= "<><><><>$chk"; } else { $_ .= "<>$select_icon<><><>$chk"; } } else { # $_ .= "<>$gf_tail[0]<>$gf_w[0]<>$gf_h[0]<>$chk"; if ( $gf_chkboxflg[0] == 1 ) { $_ .= "<><><><>$chk"; } elsif ($gf_formflg[0] == 1 ) { $_ .= "<>$gf_tailS[0]<>$gf_WS[0]<>$gf_HS[0]<>$chk"; } elsif ( length $gf_tail[0] > 1 ){ $_ .= "<>$gf_tail[0]<>$gf_w[0]<>$gf_h[0]<>$chk"; } else { $_ .= "<><><><>$chk"; } } # 投稿画像情報 # 古いファイルの最終枝番を獲得 $gf_smax = 0; foreach $gfc ($upfst .. $gf_maxno) { if ( $gf_chkboxflg[$gfc] == 1 ) { next; } if ( length $gf_tail[$gfc] > 1 ) { $gf_smax = $gfc; } } # 新しい枝番をチェック if ( $gf_new_sn > $gf_smax ) { $gf_smax = $gf_new_sn; } # 画像追加 if ($gf_smax >= 1) { foreach $gfc (1 .. $gf_smax) { # 先頭済み、追加画像処理(モードは関係なし) if ( $gf_chkboxflg[$gfc] == 1 ) { $_ .= "<><><>"; } elsif ($gf_formflg[$gfc] == 1 ) { $_ .= "<>$gf_tailS[$gfc]<>$gf_WS[$gfc]<>$gf_HS[$gfc]"; } elsif ( length $gf_tail[$gfc] > 1 ){ $_ .= "<>$gf_tail[$gfc]<>$gf_w[$gfc]<>$gf_h[$gfc]"; } else { $_ .= "<><><>"; } } } $_ .= "<>\n"; } push(@new,$_); } close(IN); } } #------------------------# # フォーム入力チェック # #------------------------# sub form_check { local($ref_url); # 他サイトからのアクセスを排除 if ($base_url) { $ref_url = $ENV{'HTTP_REFERER'}; $ref_url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if ($ref_url !~ /$base_url/i) { &error("不正なアクセスです"); } } # 入力項目のチェック if ($in{'name'} eq ""){ if (!$in{'diary_kiji'}){ # 通常記事(日記帳ではない) if ($in{'kpass'}){ &error("この記事は、日記帳ではありませんので、名前を入力してください。"); } else { &error("名前が入力されていません"); } } } if ($in{'comment'} eq "") { &error("コメントが入力されていません"); } if (!$diary){ $errmsg = ""; if ($in_email) { if ($in{'email'} eq "") { $errmsg = "Eメールが入力されていません

"; } elsif ($in{'email'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,4}/) { $errmsg = "Eメールの入力内容が不正です

"; } } if ($in_pwd) { if ($in{'pwd'} eq "") { $errmsg .= "削除キーが入力されていません
"; } } if ($errmsg) { &error("$errmsg"); } } } #--------------# # 時間を取得 # #--------------# sub get_time { $ENV{'TZ'} = "JST-9"; $times = time; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($times); @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); # 日時のフォーマット $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min); } sub get_time2 { # 日記帳のみの、日付 $ENV{'TZ'} = "JST-9"; $times = time; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($times); # 0:曜日なし 1:日本語曜日 2:英語曜日","nocom","cont"); if ($diary_week){ # 曜日あり if ($diary_week == 1){ @week = ('日曜','月曜','火曜','水曜','木曜','金曜','土曜'); } else { @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); } # 日時のフォーマット $date = sprintf("%04d/%02d/%02d(%s)",$year+1900,$mon+1,$mday,$week[$wday]); } else { $date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday); } # if ($diary_day == 3){ # $date .= sprintf(" %02d:%02d",$hour,$min); # } } sub con_week { # 日記帳のみ、曜日変換 # 0:日付なし 1:日付入力 2:自動日付表示 3:自動日付・時間表示 if ($diary_day == 1 || $diary_day == 2){ $date =~ s/(.*\))(.*)/$1/g; } # 0:曜日なし 1:日本語曜日 2:英語曜日","nocom","cont"); if ($diary_week){ # 曜日あり if ($diary_week == 1){ $date =~ s/Sun/日曜/ig; $date =~ s/Mon/月曜/ig; $date =~ s/Tue/火曜/ig; $date =~ s/Wed/水曜/ig; $date =~ s/Thu/木曜/ig; $date =~ s/Fri/金曜/ig; $date =~ s/Sat/土曜/ig; } else { $date =~ s/日曜/Sun/ig; $date =~ s/月曜/Mon/ig; $date =~ s/火曜/Tue/ig; $date =~ s/水曜/Wed/ig; $date =~ s/木曜/Thu/ig; $date =~ s/金曜/Fri/ig; $date =~ s/土曜/Sat/ig; } } else { if ( $date =~ /\(/ ){ ($date,$dmy) = split(/\(/, $date); } } } #----------------# # カウンタ処理 # #----------------# sub counter { # 閲覧時のみカウントアップ if ($mode eq '') { $cntup=1; } else { $cntup=0; } if ($page) { $cntup=0; } # ●ページ移動でもカウントアップしない # カウントファイルを読みこみ open(IN,"$cntfile") || &error("Open Error : $cntfile"); eval "flock(IN, 1);"; $data = ; close(IN); # IPチェックとログ破損チェック ($cnt, $ip) = split(/:/, $data); if ($cnt eq "") { $cntup=0; } if ($addr eq "$ip" && !$double_cnt) { $cntup=0; } # ●ダブルカウント許可の時は、カウントする # カウントアップ if ($cntup) { $cnt++; open(OUT,"+< $cntfile") || &error("Write Error : $cntfile"); eval "flock(OUT, 2);"; truncate(OUT, 0); seek(OUT, 0, 0); print OUT "$cnt\:$addr"; close(OUT); } # 桁数調整 while(length($cnt) < $mini_fig) { $cnt = '0' . $cnt; } @cnts = split(//, $cnt); # GIFカウンタ表示 if ($counter_disp || $in{'kpass'}){ # 日記管理ではカウンター表示 if ($counter == 2) { foreach (0 .. $#cnts) { print "\"$cnts[$_]\""; } } else { # テキストカウンタ表示 print "$cnt\n"; if ($menuposition != 1){ # メニューをトップ行に表示しない print "
\n"; } } } } sub counter2 { # 表示のみ # カウントファイルを読みこみ open(IN,"$cntfile") || &error("Open Error : $cntfile"); $data = ; close(IN); ($cnt, $ip) = split(/:/, $data); print "$cnt\n"; } #--------------# # ロック処理 # #--------------# sub lock { # 1分以上古いロックは削除する if (-e $lockfile) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { &unlock; } } local($retry) = 5; # symlink関数式ロック if ($lockkey == 1) { while (!symlink(".", $lockfile)) { if (--$retry <= 0) { &error('LOCK is BUSY'); } sleep(1); } # mkdir関数式ロック } elsif ($lockkey == 2) { while (!mkdir($lockfile, 0755)) { if (--$retry <= 0) { &error('LOCK is BUSY'); } sleep(1); } } $lockflag=1; } #--------------# # ロック解除 # #--------------# sub unlock { if ($lockkey == 1) { unlink($lockfile); } elsif ($lockkey == 2) { rmdir($lockfile); } $lockflag=0; } #--------------# # メール送信 # #--------------# sub mail_to { # メールタイトルを定義 $MailSub = "[$title : $no] $in{'sub'}"; # 記事の改行・タグを復元 $com = $in{'comment'}; $com =~ s/
/\n/g; $com =~ s/<//g; $com =~ s/"/\"/g; # メール本文を定義 $MailBody = <<"EOM"; 投稿日時:$date ホスト名:$host ブラウザ:$ENV{'HTTP_USER_AGENT'} 投稿者名:$in{'name'} Eメール:$in{'email'} URL :$in{'url'} タイトル:$in{'sub'} 投稿記事: $com EOM # JISコード変換 &jcode'convert(*MailSub,'jis'); &jcode'convert(*MailBody,'jis'); # メールアドレスがない場合はダミーメールに置き換え if ($in{'email'} eq "") { $email = 'nomail@xxx.xxx'; } else { $email = $in{'email'}; } if (!open(MAIL,"| $sendmail -t")) { &error("メール送信に失敗しました"); } print MAIL "To: $mailto\n"; print MAIL "From: $email\n"; print MAIL "Subject: $MailSub\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; print MAIL "--------------------------------------------------------\n"; print MAIL "$MailBody\n"; print MAIL "--------------------------------------------------------\n"; close(MAIL); } # ●「sendmail」が使えないプロバイダーに個別対応。 sub mail_to_prvd { $prvd_flg = 0; if ($prvd_mail == 1){ # @nifty対応、メールデコードを使用してメール送信する。 # http://homepage.nifty.com/mail/index.htm if ( $prvd_mailto =~ /nifty/ ){ $prvd_act = "http://mdec.nifty.com/cgi-bin/ahpmdec.cgi"; $prvd_flg = 1; } } if ($prvd_mail == 2){ # BIGLOBE対応、メール送信を使用してメール送信する。 # http://www5a.biglobe.ne.jp/~sample1/sample_m/index.html $prvd_act = "$prvd_cgi"; $prvd_flg = 2; } if ($prvd_flg){ # メールタイトルを定義 $MailSub = "[$title : $no] $in{'sub'}"; # 記事の改行・タグを復元 $com = $in{'comment'}; $com =~ s/
/\n/g; $com =~ s/<//g; $com =~ s/"/\"/g; if ($in{'email'} eq "") { $email = 'nomail@dummy.com'; } else { $email = $in{'email'}; } $Mailname = "$in{'name'}"; if ($Mailname eq "") { $Mailname = "管理者"; } $scrjump = "document.myform.submit()"; $scrtbl = "
"; if ($prvd_mailing == 9) { $scrjump = ""; $scrtbl = ""; } # テストモード # &error("123,$prvd_mailing"); print "Content-type: text/html\n\n"; print <<"EOM"; $title EOM if ($prvd_flg == 1){ # @nifty対応 print <<"EOM"; $scrtbl

EOM } if ($prvd_flg == 2){ # BIGLOBE対応 print <<"EOM"; $scrtbl
EOM } exit; # 後は、プロバイダーのCGIに任せる } } #----------------------# # パスワード暗号処理 # #----------------------# sub encrypt { local($inpw) = $_[0]; local(@SALT, $salt, $encrypt); @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))]; $encrypt = crypt($inpw, $salt) || crypt ($inpw, '$1$' . $salt); return $encrypt; } #----------------------# # パスワード照合処理 # #----------------------# sub decrypt { local($inpw, $logpw) = @_; local($salt, $key, $check); $salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); $check = "no"; if (crypt($inpw, $salt) eq "$logpw" || crypt($inpw, '$1$' . $salt) eq "$logpw") { $check = "yes"; } return $check; } #------------------# # HTMLのヘッダー # #------------------# # スクロールバー改変 # body,tr,td,th { font-size: $b_size; font-family: "$face" sub header { $head_flag=1; # この場を借りて、マウスonの時の文字列を設定 $on_mouse1 = " onmouseout=this.style.background='$button_bg_col' onMouseOver=this.style.background='$button_on_col'"; $on_mouse2 = " onmouseout=this.style.background='$form_bgcolor' onMouseOver=this.style.background='$button_on_col'"; if ($lk_under == 0){ $linktxtdec1 = "text-decoration : none ;"; } else { $linktxtdec1 = ""; } if ($lk_bgcol ne ""){ $linktxtdec1 .= "background-color : $lk_bgcol ;"; } if ($lk_ho_under == 0){ $linktxtdec2 = "text-decoration : none ;"; } else { $linktxtdec2 = "text-decoration : underline ;"; } if ($lk_ho_bgcol ne ""){ $linktxtdec2 .= "background-color : $lk_ho_bgcol ;"; } print "Content-type: text/html\n\n"; print <<"EOM"; EOM if ($script_head0_flg) { print "\n"; print "$script_head0\n"; } print <<"EOM"; $title EOM # span { font-size: $t_size } # big { font-size: 12pt } # INPUT{ background-color : #eeffff; } # textarea,input{ # font-size: $b_size; color : $tx2; # border-width : 1px ; border-style : solid ; border-color : $form_bordercol; background-color: $button_bg_col; # } if ( $picpopup ){ # ポップアップウィンドウで表示 if ( $picpopup == 2 ){ # 2:従来表示、ブラウザお任せ $str = 'str = ",resizable";'; } else { # 1:センター表示 $str = 'str = ",left=" + Pwscr + ",top=" + Phscr + ",screenX=0,screenY=0,resizable";'; } print <<"EOM"; EOM } # 以上ポップアップウィンドウ表示 if ($script_head_flg) { print "\n"; print "$script_head\n"; } print <<"EOM"; EOM if ($script_body1_flg && !$imgpageflg) { print "\n"; print "$script_body1\n"; } # アクセスレポート:閲覧時のみ、一度のreport送信 if ($script_accbd1_flg && $mode eq "" && $acc_timing_flg ==0) { print "\n"; print "$script_accbd1\n"; } } #-----------------# # 自動URLリンク # #-----------------# sub auto_link { # $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1$2<\/a>/g; $_[0] =~ s/([^=^\"]|^)((http|https|ftp|mail to)\:[\@!?=#-9A-~]+)/$1$2<\/a>/g; } #----------------# # ホスト名取得 # #----------------# sub get_host { $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq "" || $host eq $addr) { if ($testflg != 3) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } else { #030326急に遅いので!?一時的にオフにしてみる ? $host = $addr; } } } #----------------# # 過去ログ生成 # #----------------# sub pastlog { local($past_flag)=0; # 過去NOを開く open(NO,"$nofile") || &error("Open Error : $nofile"); $count = ; close(NO); # 過去ログのファイル名を定義 $pastfile = "$pastdir$count\.dat"; if (!(-e $pastfile)){ # 過去ログファイルの自動生成 v2.47 $targetdir = $pastdir; local($dir) = $targetdir; local(@files, $file, $filepath); opendir(DIR, $dir); @files = readdir(DIR); closedir(DIR); $pastfile_flg = 0; foreach $file (@files) { if ($file eq ".") { next; } if ($file eq "..") { next; } if ($nodir{$file}) { next; } $filepath = "$dir/$file"; if (-d $filepath) { $pastfile_flg = 1; } } if (!$pastfile_flg){ # ファイルがまったく無い時のみ自動生成 open(OUT,">$pastfile") || &error("Write Error : $pastfile"); print OUT 1; close(OUT); } } # 過去ログを開く open(IN,"$pastfile") || &error("Open Error : $pastfile"); @past = ; close(IN); # 規定の行数をオーバーすると次ファイルを自動生成 if ($#past > $log_line) { $past_flag=1; # カウントファイル更新 $count++; open(NO,">$nofile") || &error("Write Error : $nofile"); print NO $count; close(NO); $pastfile = "$pastdir$count\.dat"; @past=(); } @temp=(); foreach (@data) { ($pno,$preno,$pdate,$pname,$pmail,$psub,$pcom,$purl,$pho) = split(/<>/); if ($pmail) { $pname = "$pname"; } if ($purl) { $purl = "<HOME>"; } if ($preno) { $pno = "Res: $preno"; } # 保存記事をフォーマット push(@temp,"
[$pno] $psub 投稿者:$pname 投稿日:$pdate $purl
$pcom
\n"); } # 過去ログを更新 unshift(@past,@temp); open(OUT,">$pastfile") || &error("Write Error : $pastfile"); print OUT @past; close(OUT); if ($past_flag) { chmod(0666,$pastfile); } } #------------# # 過去ログ # #------------# sub past { open(IN,"$nofile") || &error("Open Error : $nofile"); $pastno = ; close(IN); if (!$in{'pastlog'}) { $in{'pastlog'} = $pastno; } &header; # [掲示板に戻る] print <<"EOM";
過去ログ[$in{'pastlog'}]

\n"; print "\n"; print "
過去ログ:\n
\n"; print "
\n"; print "\n"; print "\n"; print "ワード検索:\n"; print "条件:\n"; print "表\示:\n
\n"; # 表示ログを定義 $in{'pastlog'} =~ s/\D//g; $file = "$pastdir$in{'pastlog'}\.dat"; # ワード検索処理 if ($in{'word'} ne "") { $in{'word'} =~ s/ / /g; @pairs = split(/\s+/, $in{'word'}); @new=(); open(IN,"$file") || &error("Open Error : $file"); while () { $flag=0; foreach $pair (@pairs) { if (index($_,$pair) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; } } else { if ($in{'cond'} eq 'AND') { $flag=0; last; } } } if ($flag) { push(@new,$_); } } close(IN); $count = @new; print "検索結果:$count件\n"; if ($page eq '') { $page = 0; } $end_data = @new - 1; $page_end = $page + $in{'view'} - 1; if ($page_end >= $end_data) { $page_end = $end_data; } $next_line = $page_end + 1; $back_line = $page - $in{'view'}; $enwd = &url_enc($in{'word'}); if ($back_line >= 0) { print "[前の$in{'view'}件]\n"; } if ($page_end ne "$end_data") { print "[次の$in{'view'}件]\n"; } # 表示開始 foreach ($page .. $page_end) { print $new[$_]; } print "


\n\n"; exit; } # ページ区切り処理 $start = $page + 1; $end = $page + $p_log; $i=0; open(IN,"$file") || &error("Open Error : $file"); while () { $flag=0; if ($_ =~ /^\\[\\d+\<\/b\>\]/) { $flag=1; $i++; } if ($_ =~ /^\\[\d+\]/) { $flag=1; $i++; } if ($i < $start) { next; } if ($i > $end) { last; } if ($flag) { print $_; } else { $_ =~ s/
//ig; print "
$_
\n"; } } close(IN); print "
\n"; $next_page = $page + $p_log; $back_page = $page - $p_log; print "\n"; if ($back_page >= 0) { print "\n"; } if ($next_page < $i) { print "\n"; } print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n\n\n"; exit; } #------------------# # チェックモード # #------------------# sub check { &header; print "

Check Mode

\n"; print "
    \n"; # ■旧設定項目ファイル if (-e './joyset.pl') { print "■旧設定項目ファイル\n"; # print "
  • 設定項目ファイル:"; if (-e './joyset.pl') { print "
  • 旧設定項目ファイルのパス ./joyset.pl:OK\n"; } else { print "
  • 旧設定項目ファイルのパス:NG → ./joyset.pl\n"; } # 旧設定項目ファイルパーミッション if (-r './joyset.pl') { print "
  • 旧設定項目ファイルのパーミッション (-r) :OK\n"; } else { print "
  • 旧設定項目ファイルのパーミッション (-r) :NG\n"; } print "
  • パーミッションは読み取られないように[600]をお勧めします。"; print "

    \n"; } # ■設定項目ファイル print "■設定項目ファイル
    <管理メニューの「各種項目の設定」、もしくは「j_set.cgi」起動により、自動生成されます>\n"; # print "

  • 設定項目ファイル:"; if (-e './j_param.cgi') { print "
  • 設定項目ファイルのパス ./j_param.cgi:OK\n"; } else { print "
  • 設定項目ファイルのパス:NG → ./j_param.cgi\n"; } # 設定項目ファイルパーミッション if (-r './j_param.cgi' && -w './j_param.cgi') { print "
  • 設定項目ファイルのパーミッション (-r-w) :OK\n"; } else { print "
  • 設定項目ファイルのパーミッション (-r-w) :NG\n"; } print "
  • 通常はパーミッションの変更の必要はありません。"; print "

    \n"; # ログパス print "■ログファイル(投稿記事)\n"; if (-e $logfile) { print "

  • ログファイルのパス $logfile:OK\n"; } else { print "
  • ログファイルのパス:NG → $logfile\n"; } # ログパーミッション if (-r $logfile && -w $logfile) { print "
  • ログファイルのパーミッション (-r-w) :OK\n"; } else { print "
  • ログファイルのパーミッション (-r-w) :NG\n"; } print "

    \n"; # カウンタログ print "■カウンタ\n"; print "

  • カウンタ:"; if ($counter) { print "設定あり\n"; if (-e $cntfile) { print "
  • カウンタログファイルのパス $cntfile:OK\n"; } else { print "
  • カウンタログファイルのパス:NG → $cntfile\n"; } } else { print "設定なし\n"; } print "

    \n"; # 画像ディレクトリ # ホーム、クリップ、COMINIG SOONアイコンファイルディレクトリ print "■ホーム、クリップ、COMINIG SOONアイコンファイルディレクトリ\n"; if (-d $ImgUrl0) { print "

  • 画像ディレクトリのパス $ImgUrl0:OK\n"; } else { print "
  • 画像ディレクトリ:NG → $ImgUrl0\n"; } if (-r $ImgUrl0 && -w $ImgUrl0 && -x $ImgUrl0) { print "
  • 画像ディレクトリのパーミッション (-r-w-x) :OK\n"; } else { print "
  • 画像ディレクトリのパーミッション (-r-w-x) :NG → $ImgUrl0\n"; } print "

    \n"; # 画像ディレクトリ print "■画像ディレクトリ(画像ファイルアップロードディレクトリ)\n"; if (-d $ImgDir) { print "

  • 画像ディレクトリのパス $ImgDir:OK\n"; } else { print "
  • 画像ディレクトリ:NG → $ImgDir\n"; } if (-r $ImgDir && -w $ImgDir && -x $ImgDir) { print "
  • 画像ディレクトリのパーミッション (-r-w-x) :OK\n"; } else { print "
  • 画像ディレクトリのパーミッション (-r-w-x) :NG → $ImgDir\n"; } print "

    \n"; # アイコン画像ディレクトリ print "■アイコン画像ディレクトリ(アイコンファイルディレクトリ)\n"; if (-d $i_imgurl) { print "

  • アイコン画像ディレクトリのパス $i_imgurl:OK\n"; } else { print "
  • アイコン画像ディレクトリ:NG → $i_imgurl\n"; } if (-r $i_imgurl && -w $i_imgurl && -x $i_imgurl) { print "
  • アイコン画像ディレクトリのパーミッション (-r-w-x) :OK\n"; } else { print "
  • アイコン画像ディレクトリのパーミッション (-r-w-x) :NG → $i_imgurl\n"; } print "

    \n"; # 過去ログ print "■過去ログ\n"; print "

  • 過去ログ:"; if ($pastkey == 0) { print "設定なし\n"; } else { print "設定あり\n"; # NOファイル if (-e $nofile) { print "
  • NOファイルパス $nofile:OK\n"; } else { print "
  • NOファイルのパス:NG → $nofile\n"; } if (-r $nofile && -w $nofile) { print "
  • NOファイルパーミッション (-r-w) :OK\n"; } else { print "
  • NOファイルパーミッション (-r-w) :NG → $nofile\n"; } # ディレクトリ if (-d $pastdir) { print "
  • 過去ログディレクトリパス $pastdir:OK\n"; } else { print "
  • 過去ログディレクトリパス:NG → $pastdir\n"; } if (-r $pastdir && -w $pastdir && -x $pastdir) { print "
  • 過去ログディレクトリパーミッション (-r-w-x) :OK\n"; } else { print "
  • 過去ログディレクトリパーミッション (-r-w-x) :NG → $pastdir\n"; } } print "

    \n"; # print "

\n\n"; # ロックディレクトリ print "■ファイルロック\n"; print "
  • ロック形式:"; if ($lockkey == 0) { print "ロック設定なし\n"; } else { if ($lockkey == 1) { print "symlink\n"; } else { print "mkdir\n"; } ($lockdir) = $lockfile =~ /(.*)[\\\/].*$/; print "
  • ロックディレクトリ:$lockdir\n"; if (-d $lockdir) { print "
  • ロックディレクトリのパス:OK\n"; } else { print "
  • ロックディレクトリのパス:NG → $lockdir\n"; } if (-r $lockdir && -w $lockdir && -x $lockdir) { print "
  • ロックディレクトリのパーミッション (-r-w-x) :OK\n"; } else { print "
  • ロックディレクトリのパーミッション (-r-w-x) :NG → $lockdir\n"; } } print "\n"; # symlinkチェック $check1 = ''; $check1 = eval { symlink("",""); 1; }; if ($@) { $check1 = 2; } # flockチェック $lockfile = './lock.tmp'; $@ = ''; $check2 = ''; open(LOCK, "> $lockfile"); $check2 = eval { flock(LOCK, 2); 1; }; close(LOCK); unlink($lockfile) if (-e $lockfile); if ($@) { $check2 = 2; } print "

    ↓----------------- 以下 \symlink \Checker -----------------\n"; print <<"EOM";

      symlink関数チェック

    • あなたのサーバでは「symlink関数」は、 EOM if ($check1 == 1) { print "使用可能\と思われます。\n"; } elsif ($check1 == 2) { print "使用不可能\と思われます。\n"; } else { print "使用の可否は不明です。\n"; } print "
    • あなたのサーバでは「flock関数」は、"; if ($check2 == 1) { print "使用可能\と思われます。\n"; } elsif ($check2 == 2) { print "使用不可能\と思われます。\n"; } else { print "使用の可否は不明です。\n"; } $ver = 'symlink Checker v1.1'; print "
    \n

    \n

    $ver
    \n"; # 著作権表示(削除改変禁止) print "Copyright (C) Kent Web 2002\n"; print "
    \n"; print "

    ↑----------------- 以上 \symlink \Checker -----------------\n"; print "

    注意:「symlink関数」が使えればファイルロック形式に指定できます。
    \n"; print "   「flock関数」が使えればカウンタを使用できます。\n"; print "\n\n"; exit; } #------------------# # JPEGサイズ認識 # #------------------# sub JpegSize { local($jpeg) = @_; local($t, $m, $c, $l, $W, $H); open(JPEG, "$jpeg") || return (0,0); binmode JPEG; read(JPEG, $t, 2); while (1) { read(JPEG, $t, 4); ($m, $c, $l) = unpack("a a n", $t); if ($m ne "\xFF") { $W = $H = 0; last; } elsif ((ord($c) >= 0xC0) && (ord($c) <= 0xC3)) { read(JPEG, $t, 5); ($H, $W) = unpack("xnn", $t); last; } else { read(JPEG, $t, ($l - 2)); } } close(JPEG); return ($W, $H); } #-----------------# # GIFサイズ認識 # #-----------------# sub GifSize { local($gif) = @_; local($data); open(GIF,"$gif") || return (0,0); binmode(GIF); sysread(GIF,$data,10); close(GIF); if ($data =~ /^GIF/) { $data = substr($data,-4); } $W = unpack("v",substr($data,0,2)); $H = unpack("v",substr($data,2,2)); return ($W, $H); } #-----------------# # PNGサイズ認識 # WWWis (http://www.bloodyeck.com/wwwis/) より引用 #-----------------# sub PngSize { local($PNG) = @_; local($head, $a, $b, $c, $d, $e, $f, $g, $h); open(PNG,"$PNG") || return (0,0); binmode(PNG); if (defined(PNG) && read(PNG, $head, 8) == 8 && $head eq "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" && read(PNG, $head, 4) == 4 && read(PNG, $head, 4) == 4 && $head eq "IHDR" && read(PNG, $head, 8) == 8) { ($a,$b,$c,$d,$e,$f,$g,$h) = unpack("C"x8, $head); } else { return (0,0); } close(PNG); return ($a<<24|$b<<16|$c<<8|$d, $e<<24|$f<<16|$g<<8|$h); } #-----------------# # URLエンコード # #-----------------# sub url_enc { local($_) = @_; s/(\W)/'%' . unpack('H2', $1)/eg; s/\s/+/g; $_; } #-----------------------------# # ●入力変数セット、入力処理 # #-----------------------------# sub inperm0 { # 複数記事の最大数 # ●これ以下を書き換えたときは、$gf_maxno も同じにすること! $gf_maxno=10; # ■アイコンの時は、先頭画像は処理しない if ($icon_mode) { $upfst = 1; } else { $upfst = 0; } } sub inperm1 { # 記事表示用 親記事 # ($no2,$reno2,$d,$n,$m,$s,$com, # $u,$ho,$p,$c,$tail2,$w,$h,$chk) = split(/<>/); ($no2,$reno2,$d,$n,$m,$s,$com,$u,$ho,$p,$c, $gf_tail2[0],$gf_w[0],$gf_h[0],$chk, $gf_tail2[1],$gf_w[1],$gf_h[1], $gf_tail2[2],$gf_w[2],$gf_h[2], $gf_tail2[3],$gf_w[3],$gf_h[3], $gf_tail2[4],$gf_w[4],$gf_h[4], $gf_tail2[5],$gf_w[5],$gf_h[5], $gf_tail2[6],$gf_w[6],$gf_h[6], $gf_tail2[7],$gf_w[7],$gf_h[7], $gf_tail2[8],$gf_w[8],$gf_h[8], $gf_tail2[9],$gf_w[9],$gf_h[9], $gf_tail2[10],$gf_w[10],$gf_h[10], ) = split(/<>/); if ($chk !=0 && $chk !=1) { $chk =0; } # yy-board 対策 } sub inperm2 { # 記事表示用 # ($no,$reno,$date,$name,$mail,$sub,$comment, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); ($no,$reno,$date,$name,$mail,$sub,$comment,$url,$host,$pw,$color, $gf_tail[0],$gf_w[0],$gf_h[0],$chk, $gf_tail[1],$gf_w[1],$gf_h[1], $gf_tail[2],$gf_w[2],$gf_h[2], $gf_tail[3],$gf_w[3],$gf_h[3], $gf_tail[4],$gf_w[4],$gf_h[4], $gf_tail[5],$gf_w[5],$gf_h[5], $gf_tail[6],$gf_w[6],$gf_h[6], $gf_tail[7],$gf_w[7],$gf_h[7], $gf_tail[8],$gf_w[8],$gf_h[8], $gf_tail[9],$gf_w[9],$gf_h[9], $gf_tail[10],$gf_w[10],$gf_h[10], ) = split(/<>/); if ($chk !=0 && $chk !=1) { $chk =0; } # yy-board 対策 } # sub inperm3 { # ユーザー記事削除用 # ($no,$reno,$date,$name,$mail,$sub,$com, # $url,$host,$pw,$color,$tail,$w,$h,$chk) = split(/<>/); ($no,$reno,$date,$name,$mail,$sub,$com,$url,$host,$pw,$color, $gf_tail[0],$gf_w[0],$gf_h[0],$chk, $gf_tail[1],$gf_w[1],$gf_h[1], $gf_tail[2],$gf_w[2],$gf_h[2], $gf_tail[3],$gf_w[3],$gf_h[3], $gf_tail[4],$gf_w[4],$gf_h[4], $gf_tail[5],$gf_w[5],$gf_h[5], $gf_tail[6],$gf_w[6],$gf_h[6], $gf_tail[7],$gf_w[7],$gf_h[7], $gf_tail[8],$gf_w[8],$gf_h[8], $gf_tail[9],$gf_w[9],$gf_h[9], $gf_tail[10],$gf_w[10],$gf_h[10], ) = split(/<>/); if ($chk !=0 && $chk !=1) { $chk =0; } # yy-board 対策 } sub inperm4 { # 管理用 # ($no,$reno,$d,$n,$m,$s,$com,$u,$ho,$p,$c,$t,$w,$h,$chk) ($no,$reno,$d,$n,$m,$s,$com,$u,$ho,$p,$c, $gf_tail[0],$gf_w[0],$gf_h[0],$chk, $gf_tail[1],$gf_w[1],$gf_h[1], $gf_tail[2],$gf_w[2],$gf_h[2], $gf_tail[3],$gf_w[3],$gf_h[3], $gf_tail[4],$gf_w[4],$gf_h[4], $gf_tail[5],$gf_w[5],$gf_h[5], $gf_tail[6],$gf_w[6],$gf_h[6], $gf_tail[7],$gf_w[7],$gf_h[7], $gf_tail[8],$gf_w[8],$gf_h[8], $gf_tail[9],$gf_w[9],$gf_h[9], $gf_tail[10],$gf_w[10],$gf_h[10], ) = split(/<>/); if ($chk !=0 && $chk !=1) { $chk =0; } # yy-board 対策 } #--------------------# # ●アイコン画像表示 # #--------------------# sub image { $imagemode = @_[0]; $edtno = @_[1]; $icfile = @_[2]; local($i,$j,$stop); $imgpageflg = 1; &header; $imgpageflg = 0; print "


    \n"; print "画像イメージサンプル
    \n"; print "- 現在登録されている画像イメージは以下のとおりです -\n"; print "
    "; print "\n"; print "
    \n"; print "
    \n"; &imageset_hiden_tag; # 共通タグ書込み if ($in{'kpass'}){ # 日記帳対応 print "\n"; } if ($in{'formmode'} ne ""){ # 投稿フォームページ表示、一時表示 print "\n"; } print "\n"; print "\n"; print "
    \n"; &imageset_hiden_tag; # 共通タグ書込み if ($in{'kpass'}){ # 日記帳対応 print "\n"; } if ($in{'formmode'} ne ""){ # 投稿フォームページ表示、一時表示 print "\n"; } print "  \n"; print "
    \n"; opendir DIR,"$i_imgdir"; #ディレクトリをオープン # opendir DIR,"./img/"; # ディレクトリをオープン @alldir = readdir DIR; # ファイル一覧を得る close DIR; # print "
    "; undef @ic_exist; foreach (@alldir){ # アイコンファイル一覧を作る if ($_ eq "." || $_ eq "..") {next;} if ($ImgDir eq $i_imgurl){ # yy-bord対策 投稿画像=アイコン画像ディレクトリ if ($_ =~ /(^\d*)(_)(\d*)(\.)/) { # アップロードファイル next; } } if ($ImgUrl0 eq $i_imgurl){ # yy-bord対策 クリップ=アイコン画像ディレクトリ if ($_ eq $IconHome) {next;} # ホーム if ($_ eq $IconClip) {next;} # クリップ if ($_ eq $IconSoon) {next;} # COMINIG SOON if ($bg =~ /$_/) {next;} # 背景 } if ($_ eq "dummy.txt") {next;} # 解凍時フォルダーが作られるためのダミーファイル push(@ic_exist,$_); } &ad_rd_all; # ●タイトルと順b、管理ファイルから読み込み &ad_sort_ic;# ●アイコン表示順にソート if ($icon_waku){ # アイコン選択ページの表枠の表示 print "\n"; } else { print "
    \n"; } $i=0; $j=0; $stop = @ic_exist; $colwidth = " width=\"$icon_cellwide\""; foreach (0 .. $#ic_exist) { $i++; $j++; # print "\n"; print "\n"; print "
    \n"; &imageset_hiden_tag; # 共通タグ書込み print "\n"; if ($in{'kpass'}){ # 日記帳対応 print "\n"; } if ($in{'formmode'} ne ""){ # 投稿フォームページ表示、一時表示 print "\n"; } &ad_ic_ttl($ic_exist[$_]); # ●タイトル読み出し if ($k_title eq ""){ $ic_alt = $ic_exist[$_]; } else { $ic_alt = $k_title; } print ""; if ($icon_fname){print "
    $ic_exist[$_]\n";} if ($kanri_flg){ # 管理デーがある if ($k_title ne ""){ print "
    $k_title\n"; } else { print "
     
    \n"; } } if ($icon_waku == 2){ # 旧方法:ぴったり収める:アイコン選択ページの表枠の表示 print "\n"; } else { print "\n"; # 新方法、IE5.0 でも表の上の余白を作らない } if ($j != $stop && $i >= $icon_Linenum) { print "
    \n"; $i=0; $colwidth = ""; } elsif ($j == $stop) { if ($i == 0) { last; } while ($i < $icon_Linenum) { print ""; $i++; } } } print "

    \n"; if ($script_icn_flg) { print "\n"; print "$script_icn\n"; } print "\n\n"; exit; } sub imageset_hiden_tag { if ($imagemode eq "edtimgset") { # 記事修正選択 print "\n"; print "\n"; print "\n"; } else { # 通常選択(imgset) 返信選択 print "\n"; } if ($imagemode eq "resimgset"){ # 返信選択 print "\n"; } } sub imageset { # ■アイコンを選択して戻ってきた、クッキーを取得 &get_cookie; # 時間を取得 &get_time; # 標準クッキーに戻す、再発行 &set_cookie("icset"); } #----------------------# # ●投稿画像表示サイズ # #----------------------# sub gfsize { # ●投稿画像表示サイズ指定して戻ってきた # クッキーを取得 &get_cookie; $flg = 0; if ($in{'picsize'} eq "pics04") { $gf_sz = 0.4; $flg = 1; } if ($in{'picsize'} eq "pics06") { $gf_sz = 0.6; $flg = 1; } if ($in{'picsize'} eq "pics08") { $gf_sz = 0.8; $flg = 1; } if ($in{'picsize'} eq "pics10") { $gf_sz = 1.0; $flg = 1; } if ($in{'picsize'} eq "pics13") { $gf_sz = 1.3; $flg = 1; } if ($in{'picsize'} eq "pics17") { $gf_sz = 1.7; $flg = 1; } if ($in{'picsize'} eq "pics20") { $gf_sz = 2.0; $flg = 1; } if ($in{'picsize'} eq "pics25") { $gf_sz = 2.5; $flg = 1; } if ($in{'picsize'} eq "pics30") { $gf_sz = 3.0; $flg = 1; } if ($flg == 1) { # 時間を取得 &get_time; # クッキーを発行 &set_cookie("scope"); } } #----------------------# # ●VUP新変数の初期値 # #----------------------# sub vupvalue { # ●バージョンアップに対応する、新変数の初期値の設定 # 旧設定項目ファイルに対応 if ($kanrifile eq ""){$kanrifile = "./kanri.dat";} # ●管理者ファイル if ($sub_len eq ""){$sub_len = 15;} # 題名の長さ # v2.3 よりup (v2.22以前に対応) if ($non_res eq ""){$non_res = 0;} # 「返信」ボタンを非表示にします。 (0=no 1=yes) # v2.31 よりup if ($icon_waku eq ""){$icon_waku = 0;} # アイコン選択ページの表枠の表示。 (0=no 1=yes) # v2.42 よりup if ($i_imgdir eq ""){$i_imgdir = $i_imgurl;} # アイコン画像をアップロードするディレクトリ(2) # v2.44 よりup if ($picresize eq ""){$picresize = 1;} # ●投稿画像表示サイズの変更許可 if ($in_pwd eq ""){$in_pwd = 0;} # ●削除キー(パスワード)の入力必須 (0=no 1=yes) if ($sizecom1 eq ""){$sizecom1 = "大きなデジカメ写真などは、600〜800ピクセル程度に縮小してから投稿されますようにお願い致します。";} # ●画像サイズを推奨する文章 # v2.45 よりup if ($pic_layout eq ""){$pic_layout = 0;} # ●投稿画像を文章の上に載せる (0=no 1=yes) if ($diary_title eq ""){$diary_title = 1;} # 1:題名あり if ($diary_day eq ""){$diary_day = 1;} # 1:日付入力 if ($diary_week eq ""){$diary_week = 1;} # 1:日本語曜日 if ($diary_no eq ""){$diary_no = 0;} # 0:記事u\示なし if ($diary_comct eq ""){$diary_comct = 0;} # 日記帳の記事・センタリング # v2.46 よりup if ($prvd_mail eq ""){$prvd_mail = 0;} # ●特殊メール通知 if ($date_color eq ""){$date_color = $tx;} # ●記事の投稿日の色 if ($editcmt eq ""){$editcmt = 1;} # ●ページ最下部の記事の修正削除の案内文 if ($editcmt && $editcmt1 eq "" && $editcmt2 eq ""){ # 同上 $editcmt1 = "投稿記事のbニ、投稿した時のパスワード(削除キー)を入れると修正・削除ができます"; $editcmt2 = "記事の修正では、画像の追加削除も出来ます。お気軽にドーゾ。"; } if ($editbgcl eq ""){$editbgcl = $kmsgbgcl;} # ●ページ最下部の記事の修正削除の案内文 if ($diary_menu eq ""){ # ●閲覧者用メニューの表示項目の選択 # v2.46x3 まで既に日記帳として使っている場合初期値は「0」、新規は「2」とする if ($diary == 1){ $diary_menu = 0; } else { $diary_menu = 2; } } if ($counter_disp eq ""){$counter_disp = 1;} # ●カウンターを 0:非表示 1:表示 if ($menuposition eq ""){$menuposition = 0;} # ●メニューの表示位置 if ($t_underbar eq ""){ # ●メニューの区切り線 0:無し 1:有り if ($diary){ $t_underbar = 0; } # すでに日記帳設定なら無し else { $t_underbar = 1; } # その他は有り } if ($tblwd_tn_kiji eq ""){$tblwd_tn_kiji = 0;} # ● 記事表示枠の幅、0:% 1:ピクセル if ($tblwd_size_kiji eq ""){$tblwd_size_kiji = 93;} # ●投稿記事枠の横幅、指定するサイズ if ($tblttl_kiji eq ""){$tblttl_kiji = 1;} # ●投稿記事の先頭部分の折り返し if ($tblbg_kiji eq ""){$tblbg_kiji = 0;} # ● 記事のテーブルの透過 0:指定背景色 1:透過 if ($tblbg_edt eq ""){$tblbg_edt = 0;} # ● 記事修正削除のテーブルの透過 0:指定背景色 1:透過 if ($regist_form_page eq ""){$regist_form_page = 0;} # ● 投稿フォーム0:有り1:ボタン2:別ページ if ($formposition eq ""){$formposition = 0;} # ● 投稿フォーム0:標準位置 1:ページ下の位置 if ($nam_len eq ""){$nam_len = 25;} # おなまえ、Eメール、URLの長さ if ($sub_len eq ""){$sub_len = 15;} # ●記事タイトル入力フォームの長さ if ($com_len eq ""){$com_len = 32;} # ●コメント入力域の幅(長さ if ($pic_len eq ""){$pic_len = 32;} # ●画像・ファイル投稿入力フォーム長さ if ($formcomcnt eq ""){$formcomcnt = 7;} # ●投稿フォームの中の、コメント入力域の行数 if ( $COLORSBD[0] eq "" && $COLORSBD[1] eq "" && $COLORSBD[2] eq "" && $COLORSBD[3] eq "" ){ # ●「記事・投稿設定」の<親記事での記事枠色指定>を許可した時の枠色 if ( $bc ne "#000000" ){ @COLORSBD = ( '#8080ff','#cc6666','#ff3333','#00CC00','#ff80ff','#CC33CC', '#ffbbff','#ff9b6a','#3333FF','#00AAAA','#999999' ); } else { # 黒系 @COLORSBD = ( '#6666DD','#CCFF66','#9966DD','#999900','#DD9966','#DD6633', '#33DD66','#669999','#33DDDD','#99DD33','#DD99DD' ); } } if ( $COLORSBG[0] eq "" && $COLORSBG[1] eq "" && $COLORSBG[2] eq "" && $COLORSBG[3] eq "" ){ # ●「記事・投稿設定」の<親記事での記事背景色の指定>を許可した時の背景色 if ( $bc ne "#000000" ){ @COLORSBG = ( '#F4F4FF','#FAF0F0','#FFECEC','#ECFFEC','#FFECFF','#F8ECFF', '#FFFBFF','#FFFFEC','#ECECFF','#F9FFFC','#F5F5F5' ); } else { # 黒系 @COLORSBG = ( '#000000','#000033','#003300','#330000','#330033','#003333', '#333300','#333333','#330066','#003366','#660033' ); } } if ($double_cnt eq ""){$double_cnt = 0;} # ●ダブルカウント許可 0:無し 1:許可 if ($title_turn eq ""){$title_turn = 0;} # ●記事題名の後改行 if ($name_guide eq ""){$name_guide = 0;} # ●親記事の投稿者名の表示をレスと同様に } # sub axs_check # アクセス制限 # sub html_log # 記事表示部 # sub menu_disp # メニュー表示 # sub regist_page # ●投稿フォームのページ # sub regist_form # 投稿入力フォーム # sub gfsz_dsp # ●画像表示サイズ # sub regist # ログ書込処 # sub regist2 # ログ書込処2 # sub regist_gfset # 追加画像をセット # sub UpFile # 画像アップロード # sub res_form # 返信フォーム # sub decode # デコード処理 # sub howto # 掲示板の使い方メッセージ # sub howtopic # ●複数画像の使い方メッセージ # sub find # ワード検索処理 # sub get_agent # ブラウザを判断:フォーム幅調 # sub set_cookie # クッキーの発行 # sub get_cookie # クッキーを取得 # sub error # エラー処理 # sub admin # 管理モード # sub admin2 # ●管理:先頭メッセージ # sub ad_rd_all # ●管理データ読み込み、先頭メッセージ・アイコン # sub ad_sort_ic # ●アイコン表示順にソート # sub ad_ic_ttl # ●タイトル読み出し # sub ad_mk_file # !共通サブ # sub usr_del # ユーザ記事削除 # sub usr_edt # 記事修正処理 # sub usr_diarypwdchk # 日記帳記事パスワードチェック # sub usr_edt_pic # ●修正での複数画像表示 # sub usr_edt_pic_up # ●修正での複数画像アップロード # sub form_check # フォーム入力チェック # sub get_time # 時間を取得 # sub counter # カウンタ処理 # sub lock # ロック処理 # sub unlock # ロック解除 # sub mail_to # メール送信 # sub mail_to_prvd # ●「sendmail」が使えないプロバイダーに個別対応。 # sub encrypt # パスワード暗号処理 # sub decrypt # パスワード照合処理 # sub header # HTMLのヘッダー # sub auto_link # 自動URLリンク # sub get_host # ホスト名取得 # sub pastlog # 過去ログ生成 # sub past # 過去ログ # sub check # チェックモード # sub JpegSize # JPEGサイズ認識 # sub GifSize # GIFサイズ認 # sub PngSize # PNGサイズ認識 # sub url_enc # URLエンコード # sub inperm0 # ●入力変数セット、入力処 # sub image # ●アイコン画像表示 # sub gfsize # ●投稿画像表示サイズ # &error("123,,,"); # エラー文サンプル