#!/usr/bin/perl
# 余裕派掲示板 ver.2.62, (C)Copyright 2000-2001 OGATA TETSUJI
$masterkey = 'oopmahs';
# ↑管理用パスワード(半角英数)を''の間に書いてください。
$thisfile = '';
# ↑掲示板が動かないときは''の間にhttp://から始まるURLを入力してみてください。
# 例 $thisfile = 'http://specters.net/cgipon/yyh.cgi';
#--------------------------------------------------------------------------
#
# 掲示板のカスタマイズはブラウザ上からできますので、
# これ以降は書き換える必要はありません。
# まずはそのまま設置して動作確認を取るようにしてください。
#
#--------------------------------------------------------------------------
#==========================================================================
# [ Note ]
#==========================================================================
$scriptname = '余裕派掲示板'; # 書き換え不可
$version = 'ver.2.62'; # 書き換え不可
$copyright = '緒方哲治'; # 書き換え不可
#--------------------------------------------------------------------------
# [ 著作権・使用上の注意 ]
#
# このソフトウェア(以下「余裕派掲示板」と記述)は緒方哲治が作成しました。
# 著作権は緒方哲治に属します。(jcode.plを除く)
# 著作者の許可なく配布・販売することを禁止します。
#
# 余裕派掲示板はフリーソフトです。
# 余裕派掲示板を使用して発生したいかなる損害に対しても作者は責任を負いません。
# 改造は自由ですが、スクリプト内および表示されるHTML内にある著作者情報は削除・
# 変更しないでください。
# またCGIぽんへのリンク(以下)部分も削除・変更しないでください。
# http://specters.net/cgipon/
# http://specters.net/cgipon/yoyuuha/info/
# http://specters.net/cgipon/yoyuuha/how2/
#
# perlはversion5以上を使用してください。
# データファイルは何らかの事故により破壊されることがありますので常にバックアッ
# プを取るよう心がけてください。
#
# CGIぽん http://specters.net/cgipon/ 緒方哲治 cgipon@specters.net
#==========================================================================
# [ 環境設定 ]
#==========================================================================
$jcode = './jcode.pl';
$logfile = './logs/yoyuuha.log';
$datfile = './logs/yoyuuha.dat';
@vnm = ('5','10','15','20','25','30','50','100','500');
$cookiename = 'yoyuuha';
$infourl = 'http://specters.net/cgipon/yoyuuha/info/';
$how2url = 'http://specters.net/cgipon/yoyuuha/how2/';
#==========================================================================
# [ 更新チェック用 ]
#==========================================================================
if ($ENV{'REQUEST_METHOD'} eq 'HEAD'){
$fname = $logfile;
$ftime = gmtime((stat $fname)[9]);
@tm = split(/ +/, $ftime);
$lm = "$tm[0], $tm[2] $tm[1] $tm[4] $tm[3] GMT";
$size = -s $fname;
print "Content-type: text/html\r\n";
print "Last-Modified: $lm\r\n";
print "Accept-Ranges: bytes\r\n";
print "Content-Length: $size\r\n\r\n";
exit;
}
#==========================================================================
# [ 開始 ]
#==========================================================================
$date = &GET_DATE();
&CHECK_CODE;
&READ_FORM;
&READ_OPTION;
&CHECK_BROWSER;
&CHECK_URL;
if (!$in{ade}) {
&GET_COOKIE;
($cnam,$ckey,$cmal,$curl,$cico,$vnm) = @cookies;
}
if ($in{edt}) { ($cnam,$cmal,$curl,$cico) = (); }
&CHECK_DATA;
if (!$use && !$pas && !$ivw && !$bak) { &IO; }
if (!$ade && !$edt) { &PUT_COOKIE($cnam,$ckey,$cmal,$curl,$cico,$vnm); }
if ($mobile) { &MOBILE; }
elsif ($bak) { &BACKUP; }
elsif ($ivw) { &ICONLIST; }
&HTML_HEADER;
if ($use) { &HTML_HOW2; }
elsif ($enm) { &HTML_FORM; }
elsif ($pas) {
if ($pky eq $masterkey) { &HTML_OPTION; }
else { &HTML_PASS; }
}
else { &HTML_SET; &HTML_LIST; &HTML_FORM; }
&HTML_FOOTER;
exit;
#==========================================================================
# [ HTML表示 ]
#==========================================================================
#--------------------------------------------------------------------------
# [ HTMLヘッダ ]
sub HTML_HEADER {
if ($msg) { $msg =~ s/
$//; }
if ($backurl) {
$lnk .= "[トップページ] ";
}
if ($use || $pas) {
$lnk .= "[";
$lnk .= "$bbstitleへ戻る]";
}
else {
$lnk .= "[";
$lnk .= "$bbstitleの使い方]";
}
$msg = "
$lnk
$msg";
print<<"_END_OF_HTML_";
Content-type: text/html
_END_OF_HTML_
if ($imgtit) {
print "
\n";
} else {
print "$bbstitle
\n";
}
if ($headmsg) { print "
\n\n$headmsg\n\n\n"; }
print<<"_END_OF_HTML_";
_END_OF_HTML_
}
#--------------------------------------------------------------------------
# [ HTMLページのセット ]
sub HTML_SET {
print "\n";
print "
\n\n";
}
#--------------------------------------------------------------------------
# [ HTMLリスト ]
sub HTML_LIST {
if ($colmbg) { $colmbg = " bgcolor=$colmbg"; }
if ($next) {
print "\n";
print "[";
print "次の$vnm件>\n";
print "\n";
print "
\n\n";
}
foreach (@print) {
chomp;
($num,$key,$nam,$mal,$url,$ico,
$tit,$mes,$adm,$tim,$ipa,$rmh) = split(/,/,$_);
foreach ($nam,$tit,$mes,$adm) {
if ($ecut) { $_ = &CUT_EMOJI($_); }
if(!$enm && $swrd) {
s/($swrd)/$1<\/B><\/FONT>/go;
}
}
foreach ($mes,$adm) {
&jcode::convert(\$_,'euc');
s/(http:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\,]+)
/$1<\/A>/giox;
s/(ftp:\/\/[\w\.\~\-\/]+)/$1<\/A>/giox;
s/([\w\.\-\_]+)\@([\w\.\-\_]+)
/$1\@$2<\/A>/giox;
s/\[(\d+)\]
/\[$1\]<\/A>/giox;
s/([^>])( )([^( )])/$1 $3/g;
foreach $chtxt (@chtxt) {
my($btxt,$atxt) = split(/=>/,$chtxt);
s/(?:$btxt)/$atxt/g;
}
&jcode::convert(\$_,$ccode);
}
$num = ""
. "[$num]";
if ($mal) {
$nam = ""
. "$nam";
} else {
$nam = "$nam";
}
if ($tit) {
$tit = "$tit";
}
$tim = &GET_DATE($dateformat,$tim);
$tim = "$tim";
if ($url) {
if ($imglnk) {
$tmp = ""
. "
";
} elsif ($lnktxt) {
$tmp = "["
. "$lnktxt]";
} else {
$tmp = "["
. "http://$url]";
}
$url = "$tmp";
}
if ($icons[0]) {
if ($ico eq '&d') { $ico = $ico_d; }
elsif ($ico =~ /&e/) { $ico = $ico_e; }
elsif ($ico eq '&h') { $ico = $ico_h; }
elsif ($ico eq '&i') { $ico = $ico_i; }
elsif ($ico eq '&j') { $ico = $ico_j; }
$ico ||= $icons[0];
$ico = " ";
} else {
$ico = '';
}
$mes = "$mes
";
if($adm) {
$tmp = '';
if ($ico_a) { $tmp = " "; }
$tmp = "| $tmp | "
. "$adm "
. "[from $adminname] | ";
$adm = $tmp;
}
print<<"_END_OF_HTML_";
_END_OF_HTML_
}
print " \n\n";
if ($prev) {
print "\n";
print "<";
print "前の$vnm件]\n";
print "\n";
print " \n\n";
}
}
#--------------------------------------------------------------------------
# [ HTMLフォーム ]
sub HTML_FORM {
if ($enm) {
chomp $print[0];
($cnum,$ckey,$cnam,$cmal,$curl,$cico,$ctit,$cmes,$cadm,$ctim,$cipa,$crmh)
= split(/,/,$print[0]);
($num,$key,$nam,$mal,$url,$ico,
$tit,$mes,$adm,$tim,$ipa,$rmh) = split(/,/,$print[0]);
$num = "[戻る]";
$num = "$num";
if ($tit) { $tit = "$tit"; }
if ($mal) { $nam = "$nam"; }
$nam = "$nam";
$tim = &GET_DATE($dateformat,$tim);
$tim = "$tim";
if($url){
$tmp = "[";
$tmp .= "http://$url]";
$url = $tmp;
}
$cmes =~ s/ /\n/g;
$cadm =~ s/ /\n/g;
if ($ade) {
$rmh &&= "($rmh)";
$ipa = "[$ipa$rmh]";
} else { $ipa = ''; }
print<<"_END_OF_HTML_";
|
$num
$tit
$nam
$tim
$ipa
|
$url
|
|
_END_OF_HTML_
}
if ($edt) { ($cnam,$ckey,$cmal,$curl,$cico,$vnm) = @cookies; }
else { $cookies[10] = "$in{edt}"; }
foreach ($cnam,$ctit,$cmes,$cadm) {
s/<//g;
s/ / /g;
s/&/&/g;
}
print "\n";
print "\n\n\n";
print " \n\n"
}
#--------------------------------------------------------------------------
# [ HTMLフッタ ]
sub HTML_FOOTER {
$ft1 = "[$date] $bbstitle ";
$tmp = "管理人";
if ($enm && !$ade) {
$ft1 .= "";
$ft1 .= "$tmp ";
} elsif ($use) {
$ft1 .= "$tmp ";
} elsif ($pas || $set || $ade) {
$ft1 .= "管理人 ";
} else {
$ft1 .= "$tmp ";
}
$ft1 .= "$adminname";
$ft2 = "$scriptname ";
$ft2 .= "$version";
print<<"_END_OF_HTML_";
_END_OF_HTML_
exit;
}
#--------------------------------------------------------------------------
# [ パスワード入力 ]
sub HTML_PASS {
print " \n\n";
print "\n";
print "\n\n \n";
}
#--------------------------------------------------------------------------
# [ オプション設定ページ ]
sub HTML_OPTION {
foreach (@icons) {
$pre{icons} .= " ";
}
if ($ico_d) { $pre{ico_d} = " "; }
if ($ico_e) { $pre{ico_e} = " "; }
if ($ico_h) { $pre{ico_h} = " "; }
if ($ico_i) { $pre{ico_i} = " "; }
if ($ico_j) { $pre{ico_j} = " "; }
if ($ico_a) { $pre{ico_a} = " "; }
if ($def{ico_d}) { $def{ico_d} = " "; }
if ($def{ico_e}) { $def{ico_e} = " "; }
if ($def{ico_h}) { $def{ico_h} = " "; }
if ($def{ico_i}) { $def{ico_i} = " "; }
if ($def{ico_j}) { $def{ico_j} = " "; }
if ($def{ico_a}) { $def{ico_a} = " "; }
$ilebel[$ilebel] = ' checked';
$olebel[$olebel] = ' checked';
$ecut[$ecut] = ' checked';
$tsize[$tsize] = ' checked';
$def{headmsg} =~ s/,/ /g;
$def{footmsg} =~ s/,/ /g;
$def{chtxt} =~ s/,/ /g;
$txt{headmsg} = $headmsg;
$txt{footmsg} = $footmsg;
$txt{icons} = $icons;
$txt{chtxt} = $chtxt;
$txt{headmsg} =~ s/ /\n/g;
$txt{footmsg} =~ s/ /\n/g;
$txt{icons} =~ s/,/\n/g;
$txt{chtxt} =~ s/,/\n/g;
$hissu = ' 必須項目';
print<<"_END_OF_HTML_";
_END_OF_HTML_
print "\n \n\n";
}
#--------------------------------------------------------------------------
# [ 使い方 ]
sub HTML_HOW2 {
if ($ecut) { $msg = "絵文字はi-mode、ドットiでのみ表\示されます。"; }
else { $msg = "i-mode、ドットiの絵文字は投稿できません。"; }
if ($colmbg) { $colmbg = " bgcolor=$colmbg"; }
print<<"_END_OF_HTML_";
|
書き込みルール
|
- HTMLタグは使えません。
- URL、メールアドレスは自動的にリンクされます。
- [ ](四角カッコ)に半角数字を書くと、その番号以前の記事へリンクされます。
|
|
検索方法
|
- 過去の記事の検索ができます。
- [ ](四角カッコ)に半角数字を入れて送信すれば、その番号以前の記事が読めます。
- 半角数字と/(スラッシュ)で日付を指定すれば、その日付以前のの記事が読めます。
- 1バイト(半角一文字)では検索できません。
|
|
修正方法
|
- 一度書き込んだメッセージを修正することができます。
- 記事の番号をクリックすると修正画面になります。
- 直したい部分を訂正して送信すれば修正できます。
- 修正できるのは本人の(クッキーを受け取った)パソ\コンのみです。
- 修正は$limit分以内、一度に限り可能\です。
- さらに修正したい場合は管理人にお問い合せください。
|
|
モバイルアクセス
|
- i-mode、H"、J-SKY、EZweb、ドットiに対応しています。
次のURLでアクセスしてください。
$thisfile
- $msg
|
さらに詳しく知りたい方は
こちら
をご覧ください。
_END_OF_HTML_
}
#--------------------------------------------------------------------------
# [ モバイル表示 ]
sub MOBILE {
# ヘッダ
if ($mobile eq 'e') {
print "Content-type: text/x-hdml;charset=Shift_JIS\n\n";
print "\n";
print "\n";
print "\n";
print "$bbstitle \n";
if ($hmsg) {
$hmsg =~ s/\$/&dol;/g;
print "$hmsg \n";
}
}
elsif ($mobile eq 'h') {
$thisfile =~ s/http://;
$backurl =~ s/http://;
$infourl =~ s/http://;
$coldef =~ s/\#//;
$colbak =~ s/\#//;
$coladm =~ s/\#//;
$bbstitle =~ s/"/"/g;
print "Content-Type: text/plain\n\n";
print "From: $thisfile\n";
print "Subject: $bbstitle\n";
print "Content-Type: Text/X-PmailDX\n\n";
if ($prev) { print "\n"; }
if ($next) { print "\n"; }
if ($ilebel) { print "\n"; }
else { print "\n"; }
if ($backurl) { print "\n"; }
print "\n";
print "\n";
print "";
print "$bbstitle\n";
if ($hmsg) {
$hmsg =~ s/</</g;
$hmsg =~ s/"/"/g;
print "$hmsg\n";
}
$msg =~ s/ /\n/g;
}
else {
print "Content-type: text/html\n\n";
print "";
unless (($mobile eq 'j') && ($mob{ver} <= 2)) {
print "$bbstitle";
}
print "";
print "\n$bbstitle\n";
if ($hmsg) {
print " \n";
}
}
# リスト開始
if ($msg) { print "$msg$br\n"; }
if ($next) {
if ($mobile eq 'h') { print "$key[3]次の$vnm件\n"; }
else {
print "$key[3]次の$vnm件";
print " \n";
}
}
# リスト
foreach (@print) {
chomp;
($num,$key,$nam,$mal,$url,$ico,$tit,$mes,$adm,$tim,$ipa,$rmh)
= split(/,/,$_);
$mes =~ s/ /$br/g;
$adm =~ s/ /$br/g;
$tim = &GET_DATE('MM/dd HH:mm',$tim);
print "$hr\n";
if ($mobile eq 'e') {
# ez処理
foreach ($tit,$nam,$mes,$adm) {
s/,/,/g;
s/&/&/g;
s/( )+/ /g;
s/\$/&dol;/g;
if ($ecut) { $_ = &CUT_EMOJI($_); }
if (@chtxt) {
&jcode::convert(\$_,'euc');
foreach $chtxt (@chtxt) {
my($btxt,$atxt) = split(/=>/,$chtxt);
s/(?:$btxt)/$atxt/g;
}
&jcode::convert(\$_,$ccode);
}
}
if ($olebel) {
foreach ($mes,$adm) {
&jcode::convert(\$_,'euc');
s/(http:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\,]+)
/$1<\/A>/giox;
s/([\w\.\-\_]+)\@([\w\.\-\_]+)
/$1\@$2<\/A>/giox;
&jcode::convert(\$_,$ccode);
}
}
if ($tit) { print "$tit/\n"; }
if ($mal) {
print "$nam \n";
} else {
print "$nam \n";
}
print "$tim \n";
print "$mes \n";
if ($adm) { print "[$adminname]$adm \n"; }
}
elsif ($mobile eq 'h') {
# ONC処理
foreach ($tit,$nam,$mes,$adm) {
s/</</g;
s/"/"/g;
s/,/,/g;
s/( )+/ /g;
s/&/&/g;
if ($ecut) { $_ = &CUT_EMOJI($_); }
if (@chtxt) {
&jcode::convert(\$_,'euc');
foreach $chtxt (@chtxt) {
my($btxt,$atxt) = split(/=>/,$chtxt);
s/(?:$btxt)/$atxt/g;
}
&jcode::convert(\$_,$ccode);
}
}
if ($tit) { print "$tit/\n"; }
if ($olebel) { $mal &&= "($mal)"; } else { $mal = ''; }
print "$nam$mal\n$tim\n$mes\n";
if ($adm) { print "[$adminname]$adm\n"; }
}
else {
# C-HTML処理
foreach ($tit,$nam,$mes,$adm) {
s/,/,/g;
s/"/"/g;
s/&/&/g;
if ($ecut) {
if ($mobile =~ /[di]/) { $_ = &REP_EMOJI($_); }
else { $_ = &CUT_EMOJI($_); }
}
if (@chtxt) {
&jcode::convert(\$_,'euc');
foreach $chtxt (@chtxt) {
my($btxt,$atxt) = split(/=>/,$chtxt);
s/(?:$btxt)/$atxt/g;
}
&jcode::convert(\$_,$ccode);
}
}
if ($olebel) {
foreach ($mes,$adm) {
&jcode::convert(\$_,'euc');
s/(http:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\,]+)
/$1<\/A>/giox;
s/([\w\.\-\_]+)\@([\w\.\-\_]+)
/$1\@$2<\/A>/giox;
&jcode::convert(\$_,$ccode);
}
}
if ($tit) { print "$tit/\n"; }
if ($mal) {
print "";
print "$nam \n";
} else {
print "$nam \n";
}
print "$tim \n";
print "$mes \n";
if ($adm) {
print "[$adminname]\n$adm\n \n";
}
}
}
# リスト終了
print "$hr\n";
if ($prev) {
if ($mobile eq 'h') { print "$key[1]前の$vnm件\n"; }
else {
print "$key[1]前の$vnm件";
print " \n";
}
print "$hr\n";
}
# フォームとフッタ
if ($mobile eq 'e') {
# ez処理
$thisfile = "$thisfile?t=" . time();
if ($backurl) {
print "$key[7]戻る \n";
}
print "$key[9]cgipon info\n";
print "\n";
print "\n";
if ($ilebel) {
print "\n";
print "名前(必須)\n";
print "\n";
if ($ilebel) {
print "\n";
print "\n";
print "メールアドレス\n";
print "\n";
}
print "\n";
print "\n";
print "タイトル\n";
print "\n";
print "\n";
print "\n";
print "内容(必須)\n";
print "\n";
print "\n";
}
elsif ($mobile eq 'h') {
# ONC処理
print "$key[5]投稿する\n";
print "ネチケット遵守\n";
print "$hr\n";
if ($backurl) { print "$key[7]戻る\n$hr\n"; }
print "$key[9]cgipon info\n";
print "S 終了\n";
}
else {
# C-HTML処理
print "$key[5]投稿欄==== \n";
if (($mobile eq 'j') && ($mob{ver} <= 2)) {
print "\n";
print "$hr";
if ($backurl) {
print "$key[7]戻る \n$hr\n";
}
print "$key[9]cgipon info \n";
print "";
print "";
}
exit;
}
#--------------------------------------------------------------------------
# [ アイコンリストの表示 ]
sub ICONLIST {
if ($colmbg) { $colmbg = " bgcolor=$colmbg"; }
print "Content-type: text/html\n\n";
print "$bbstitle";
print "";
print "\n";
foreach (@icons) {
print " | $iconam{$_} | ";
print " | ";
}
print " \n";
print "";
exit;
}
#--------------------------------------------------------------------------
# [ バックアップファイルの吐き出し ]
sub BACKUP {
&LOCK_FILE("$logfile.1.txt");
&LOCK_FILE("$logfile.2.txt");
open (LOG,"<$logfile") or &DIE("ログファイルが開けません。");
print "Content-type: text/plain\n\n";
while ($log = ) {
print "$log";
}
close (LOG);
&UNLOCK_FILE("$logfile.1.txt");
&UNLOCK_FILE("$logfile.2.txt");
exit;
}
#==========================================================================
# [ サブルーチン ]
#==========================================================================
#--------------------------------------------------------------------------
# [ コードのチェック ]
sub CHECK_CODE {
-r $jcode or &DIE("jcode.plがありません。");
require $jcode;
if (ord($copyright)%5 == 3) { $ccode = 'sjis'; $charset = 'Shift_JIS'; }
elsif (ord($copyright)%5 == 4) { $ccode = 'euc'; $charset = 'euc-jp'; }
elsif (ord($copyright)%5 == 2) { $ccode = 'jis'; $charset = 'iso-2022-jp'; }
else { &DIE("文字コードが認識できません。"); }
}
#--------------------------------------------------------------------------
# [ フォームの読み込み ]
sub READ_FORM {
read(STDIN, my($post), $ENV{'CONTENT_LENGTH'});
my($get) = $ENV{'QUERY_STRING'};
if ($post && $get) { $in = join('&',$post,$get); }
else { $in = "$post$get"; }
my(@pairs) = split(/&/,$in);
foreach (@pairs) {
my($name,$value) = split(/=/,$_,2);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$in{$name} = &CHANGE_CODE($value);
}
if ($in{pky} eq $masterkey) { $master = 1; }
}
#--------------------------------------------------------------------------
# [ 設定の読み込み ]
sub READ_OPTION {
$def{backurl} = '';
$def{back_d} = '';
$def{back_e} = '';
$def{back_h} = '';
$def{back_i} = '';
$def{back_j} = '';
$def{imgfolder} = './img';
$def{iconname} = 'アイコン';
$def{icons} = '';
$def{ico_d} = 'i_doti.gif';
$def{ico_e} = 'i_ez.gif';
$def{ico_h} = 'i_h.gif';
$def{ico_i} = 'i_i.gif';
$def{ico_j} = 'i_j.gif';
$def{ico_a} = '';
$def{limit} = 10;
$def{logmax} = 500;
$def{colanc} = '#333399';
$def{colhov} = '#ff3333';
$def{coltbg} = '#efefef';
$def{colnum} = '#3366cc';
$def{coltit} = '#003366';
$def{colnam} = '#339900';
$def{coltim} = '#996633';
$def{coladm} = '#0000cc';
$def{colsch} = '#cc0000';
$def{coldef} = '#000000';
$def{colbak} = '#e0e0e0';
$def{colptt} = '#000000';
$def{colmbg} = '';
$def{imgbak} = '';
$def{imglnk} = '';
$def{imgtit} = '';
$def{lnktxt} = '';
$def{dateformat} = 'yyyy/MM/dd(DDD)HH:mm';
$def{bbstitle} = '余裕派掲示板';
$def{adminname} = '';
$def{adminmail} = '';
$def{ilebel} = 0;
$def{olebel} = 0;
$def{ecut} = 0;
$def{tabborder} = '0';
$def{pwidth} = '100%';
$def{tsize} = '0';
$def{hmsg_d} = '';
$def{hmsg_e} = '';
$def{hmsg_h} = '';
$def{hmsg_i} = '';
$def{hmsg_j} = '';
$def{headmsg} = '';
$def{footmsg} = 'お名前と内容は必須です(省略することはできません)。,';
$def{footmsg} .= '電話番号や住所などの個人情報は書きこまないでください。,';
$def{footmsg} .= 'タグは使えません(URL等は自動的にリンクされます)。,';
$def{mailpath} = '';
$def{chtxt} = '';
foreach ($in{headmsg},$in{footmsg},$in{icons},$in{chtxt}) {
s/\r//g;
s/\n\n[\n]+/\n\n\n/g;
s/^\n+//g;
s/[\n| | ]+$//g;
}
$in{to} =~ s/,/,/g;
$in{to} =~ s/ / /g;
if ($in{set} && $master) {
@option = (
"backurl<>$in{backurl}",
"back_d<>$in{back_d}",
"back_e<>$in{back_e}",
"back_h<>$in{back_h}",
"back_i<>$in{back_i}",
"back_j<>$in{back_j}",
"imgfolder<>$in{imgfolder}",
"iconname<>$in{iconname}",
"icons<>$in{icons}",
"ico_d<>$in{ico_d}",
"ico_e<>$in{ico_e}",
"ico_h<>$in{ico_h}",
"ico_i<>$in{ico_i}",
"ico_j<>$in{ico_j}",
"ico_a<>$in{ico_a}",
"limit<>$in{limit}",
"logmax<>$in{logmax}",
"colanc<>$in{colanc}",
"colhov<>$in{colhov}",
"coltbg<>$in{coltbg}",
"colnum<>$in{colnum}",
"coltit<>$in{coltit}",
"colnam<>$in{colnam}",
"coltim<>$in{coltim}",
"coladm<>$in{coladm}",
"colsch<>$in{colsch}",
"coldef<>$in{coldef}",
"colbak<>$in{colbak}",
"colptt<>$in{colptt}",
"colmbg<>$in{colmbg}",
"imgbak<>$in{imgbak}",
"imglnk<>$in{imglnk}",
"imgtit<>$in{imgtit}",
"lnktxt<>$in{lnktxt}",
"dateformat<>$in{dateformat}",
"bbstitle<>$in{bbstitle}",
"adminname<>$in{adminname}",
"adminmail<>$in{adminmail}",
"mailpath<>$in{mailpath}",
"to<>$in{to}",
"ilebel<>$in{ilebel}",
"olebel<>$in{olebel}",
"ecut<>$in{ecut}",
"tabborder<>$in{tabborder}",
"pwidth<>$in{pwidth}",
"tsize<>$in{tsize}",
"hmsg_d<>$in{hmsg_d}",
"hmsg_e<>$in{hmsg_e}",
"hmsg_h<>$in{hmsg_h}",
"hmsg_i<>$in{hmsg_i}",
"hmsg_j<>$in{hmsg_j}",
"headmsg<>$in{headmsg}",
"footmsg<>$in{footmsg}",
"chtxt<>$in{chtxt}"
);
&LOCK_FILE("$datfile.1.txt");
&LOCK_FILE("$datfile.2.txt");
open (OPT,">$datfile") or $msg .= "設定ファイルが開けません。 ";
foreach (@option) {
s/\n+$//;
s/\n+/,/g;
print OPT "$_\n";
}
close (OPT);
&UNLOCK_FILE("$datfile.1.txt");
&UNLOCK_FILE("$datfile.2.txt");
}
&LOCK_FILE("$datfile.1.txt");
&LOCK_FILE("$datfile.2.txt");
open (OPT,"<$datfile") or $msg .= "設定ファイルが開けません。 ";
@option = ;
&UNLOCK_FILE("$datfile.1.txt");
&UNLOCK_FILE("$datfile.2.txt");
foreach (@option) {
chomp;
if (/<>/) { ($optname,$optvalue) = split(/<>/,$_); }
else { ($optname,$optvalue) = split(/&/,$_); }
$opt{$optname} = $optvalue;
}
@option = ();
$opt{ico_e} ||= $opt{ico_ez};
$opt{back_e} ||= $opt{back_ez};
foreach (
'backurl',
'back_d',
'back_e',
'back_h',
'back_i',
'back_j',
'imgfolder',
'iconname',
'icons',
'ico_d',
'ico_e',
'ico_h',
'ico_i',
'ico_j',
'ico_a',
'limit',
'logmax',
'colanc',
'colhov',
'coltbg',
'colnum',
'coltit',
'colnam',
'coltim',
'coladm',
'colsch',
'coldef',
'colbak',
'colptt',
'colmbg',
'imgbak',
'imglnk',
'imgtit',
'lnktxt',
'dateformat',
'bbstitle',
'adminname',
'adminmail',
'mailpath',
'to',
'tabborder',
'pwidth',
'tsize',
'ilebel',
'olebel',
'ecut',
'hmsg_d',
'hmsg_e',
'hmsg_h',
'hmsg_i',
'hmsg_j',
'headmsg',
'footmsg',
'chtxt'
) { $opt{$_} ||= $def{$_}; }
$backurl = $opt{backurl};
$back_d = $opt{back_d};
$back_e = $opt{back_e};
$back_h = $opt{back_h};
$back_i = $opt{back_i};
$back_j = $opt{back_j};
$imgfolder = $opt{imgfolder};
$iconname = $opt{iconname};
$icons = $opt{icons};
$ico_d = $opt{ico_d};
$ico_e = $opt{ico_e};
$ico_h = $opt{ico_h};
$ico_i = $opt{ico_i};
$ico_j = $opt{ico_j};
$ico_a = $opt{ico_a};
$limit = $opt{limit};
$logmax = $opt{logmax};
$colanc = $opt{colanc};
$colhov = $opt{colhov};
$coltbg = $opt{coltbg};
$colnum = $opt{colnum};
$coltit = $opt{coltit};
$colnam = $opt{colnam};
$coltim = $opt{coltim};
$coladm = $opt{coladm};
$colsch = $opt{colsch};
$coldef = $opt{coldef};
$colbak = $opt{colbak};
$colptt = $opt{colptt};
$colmbg = $opt{colmbg};
$imgbak = $opt{imgbak};
$imglnk = $opt{imglnk};
$imgtit = $opt{imgtit};
$lnktxt = $opt{lnktxt};
$dateformat = $opt{dateformat};
$bbstitle = $opt{bbstitle};
$adminname = $opt{adminname};
$adminmail = $opt{adminmail};
$mailpath = $opt{mailpath};
$to = $opt{to};
$tabborder = $opt{tabborder};
$pwidth = $opt{pwidth};
$tsize = $opt{tsize};
$ilebel = $opt{ilebel};
$olebel = $opt{olebel};
$ecut = $opt{ecut};
$hmsg_d = $opt{hmsg_d};
$hmsg_e = $opt{hmsg_e};
$hmsg_h = $opt{hmsg_h};
$hmsg_i = $opt{hmsg_i};
$hmsg_j = $opt{hmsg_j};
$headmsg = $opt{headmsg};
$footmsg = $opt{footmsg};
$chtxt = $opt{chtxt};
foreach ($bbstitle,$adminname,$hmsg_d,$hmsg_e,$hmsg_h,$hmsg_i,$hmsg_j) {
s/ / /g;
s/,/,/g;
s/&/&/g;
}
foreach ($headmsg,$footmsg) {
s/<//g;
s/"/"/g;
s/ / /g;
s/&/&/g;
}
@icons = split(/,/,$icons);
if ($icons[0] =~ /=/) {
for ($i = 0; $i <= $#icons; $i++) {
my($name,$value) = split(/=/,$icons[$i]);
$icons[$i] = $name;
$iconam{$name} = $value;
}
}
@footmsg = split(/,/,$footmsg);
$headmsg =~ s/,/ /g;
$footmsg =~ s/,/ /g;
$imgfolder =~ s/\/$//;
@chtxt = split(/,/,$chtxt);
foreach (@chtxt) { &jcode::convert(\$_,euc); }
if ($tabborder) { $border = " border=$tabborder"; }
if ($pwidth) { $width = " width=$pwidth"; }
if ($tsize) { $size = " size=-1"; }
if (!$adminname || !$adminmail) { $pas = 1; }
}
#--------------------------------------------------------------------------
# [ ブラウザのチェック ]
sub CHECK_BROWSER {
($mob{car},$mob{ver},$mob{mod}) = split(/\//,$ENV{'HTTP_USER_AGENT'});
if ($mob{car} eq 'J-PHONE') {
$mobile = 'j';
$adkey = 'directkey';
$imgext = '.png';
$hr = ' ';
$br = ' ';
$href = 'href';
$mailto = 'mailto:';
@key = ();
if ($back_j) { $backurl = $back_j; } else { $backurl = ''; }
if ($hmsg_j) { $hmsg = $hmsg_j; } else { $hmsg = ''; }
}
elsif ($mob{car} eq 'DoCoMo') {
$mobile = 'i';
$adkey = 'accesskey';
$imgext = '.gif';
$hr = ' ';
$br = ' ';
$href = 'href';
$mailto = 'mailto:';
@key = ('戀','驪','麗','黎','力',
'曆','歷','轢','年','憐');
if ($back_i) { $backurl = $back_i; } else { $backurl = ''; }
if ($hmsg_i) { $hmsg = $hmsg_i; } else { $hmsg = ''; }
}
elsif (($mob{car} eq 'PDXGW') || ($mob{car} eq 'Ginga')) {
$mobile = 'h';
$imgext = '.gif';
@key[1..9] = ('@','A','B','C','D','E','F','G','H');
($mob{ver},$pdx) = split(/\(/,$mob{ver});
$pdx =~ s/\)$//;
@pdx = split(/;/,$pdx);
foreach (@pdx) {
my($name,$value) = split(/=/,$_);
$pdx{$name} = $value;
}
if ($pdx{TX}) { $hr = '−' x $pdx{TX}; } else { $hr = '−' x 6; }
if ($back_h) { $backurl = $back_h; } else { $backurl = ''; }
if ($hmsg_h) { $hmsg = $hmsg_h; } else { $hmsg = ''; }
$br = "\n";
}
elsif ($mob{car} eq 'UP.Browser') {
$mobile = 'e';
$adkey = 'accesskey';
if ($ENV{HTTP_X_UP_DEVCAP_ISCOLOR}) { $imgext = '.png'; }
else { $imgext = '.bmp'; }
$br = ' ';
$href = 'task="go" dest';
@key = ();
if ($ENV{HTTP_X_UP_DEVCAP_SCREENCHARS}) {
($ez{TX},$ez{TY}) = split(/,/,$ENV{HTTP_X_UP_DEVCAP_SCREENCHARS});
$hr = '-' x $ez{TX};
$hr .= ' ';
} else {
$hr = '------------ ';
}
if ($ENV{HTTP_X_UP_DEVCAP_MAX_PDU} <= 5000) { $in{vnm} = 3; }
else { $in{vnm} = 5; }
if ($back_e) { $backurl = $back_e; } else { $backurl = ''; }
if ($hmsg_e) { $hmsg = $hmsg_e; } else { $hmsg = ''; }
if (($ENV{HTTP_X_UP_UPLINK} =~ /ezweb/) && (!$ENV{HTTP_X_UP_FAX_LIMIT})) {
$mailto = 'mailto:';
} else {
$mailto = 'device:home/goto?svc=Email&SUB=sendMsg" vars="TO=';
}
}
elsif ($mob{car} eq 'ASTEL') {
$mobile = 'd';
$adkey = 'accesskey';
$imgext = '.gif';
$hr = ' ';
$br = ' ';
$href = 'href';
$mailto = 'mailto:';
for ($i = 0; $i <= 9; $i++) { $key[$i] = "$i."; }
$in{vnm} = 5;
if ($back_d) { $backurl = $back_d; } else { $backurl = ''; }
if ($hmsg_d) { $hmsg = $hmsg_d; } else { $hmsg = ''; }
}
}
#--------------------------------------------------------------------------
# [ URLのチェック ]
sub CHECK_URL {
$thisfile ||= 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
$thisfile =~ s/\?\S+$//;
}
#--------------------------------------------------------------------------
# [ コードチェンジ ]
sub CHANGE_CODE {
my($text) = $_[0];
if ($ccode eq 'euc') { &jcode::h2z_euc(\$text); }
elsif ($ccode eq 'jis') { &jcode::h2z_jis(\$text); }
elsif ($ccode eq 'sjis') { &jcode::h2z_sjis(\$text); }
&jcode::convert(\$text,$ccode);
$text =~ s/&/&/g;
$text =~ s/,/,/g;
$text =~ s/</g;
$text =~ s/>/>/g;
$text =~ s/"/"/g;
$text =~ s/ / /g;
return $text;
}
#--------------------------------------------------------------------------
# [ クッキーの取得 ]
sub GET_COOKIE {
foreach (split(/; */,$ENV{'HTTP_COOKIE'})) {
my($name,$value) = split(/=/,$_);
$cookies{$name} = $value;
}
@cookies = split(/:/,$cookies{$cookiename});
foreach (@cookies) { $_ = &CHANGE_CODE($_); }
}
#--------------------------------------------------------------------------
# [ クッキーを食わせる ]
sub PUT_COOKIE {
my($cookies) = join(':',@_);
$cookies =~ s/,/,/g;
$cookies =~ s/<//g;
$cookies =~ s/"/"/g;
$cookies =~ s/ / /g;
$cookies =~ s/&/&/g;
my($expires) = time() + 30 * 24 * 60 * 60;
$expires = &GET_DATE('DDD, dd-MM-yyyy HH:mm:ss',$expires,'en');
print "Set-Cookie: $cookiename=$cookies; expires=$expires GMT\n";
}
#--------------------------------------------------------------------------
# [ 入力内容のチェック ]
sub CHECK_DATA {
if ($mobile eq 'h') {
$thisfile =~ s/http://;
if ($in{pdxturn} == 1) {
$in{nam} = $in{pdxsubj};
}
elsif ($in{pdxreq} eq 'mal') {
print "Content-Type: text/plain\n\n";
print "X-PmailDX-CTRL: NameRequest\n";
print "From: $thisfile?pdxreq=nam\n";
print "Content-Type: Text/Plain\n\n";
print "メールアドレス入力\n";
exit;
}
elsif ($in{pdxreq} eq 'nam') {
$mal = $in{pdxname};
print "Content-Type: text/plain\n\n";
print "From: $thisfile?mal=$mal&pdxreq=tit\n";
print "X-PmailDX-Input: KANJI\n";
print "Content-Type: Text/Plain\n\n";
print "お名前入力\n";
exit;
}
elsif (($in{pdxreq} eq 'tit') && ($nam = $in{pdxdata})) {
$mal = $in{mal};
$nam =~ s/,/,/g;
$nam =~ s/<//g;
$nam =~ s/"/"/g;
$nam =~ s/ / /g;
$nam =~ s/&/&/g;
$nam =~ s/([^a-zA-Z0-9_.-])/sprintf("%%%02X",ord($1))/eg;
print "Content-Type: text/plain\n\n";
print "From: $thisfile?mal=$mal&nam=$nam&pdxreq=mes\n";
print "X-PmailDX-Input: KANJI\n";
print "Content-Type: Text/Plain\n\n";
print "タイトル入力\n";
exit;
}
elsif ($in{pdxreq} eq 'mes') {
$mal = $in{mal};
$nam = $in{nam};
$nam =~ s/,/,/g;
$nam =~ s/<//g;
$nam =~ s/"/"/g;
$nam =~ s/ / /g;
$nam =~ s/&/&/g;
$nam =~ s/([^a-zA-Z0-9_.-])/sprintf("%%%02X",ord($1))/eg;
$tit = $in{pdxdata};
$tit =~ s/,/,/g;
$tit =~ s/<//g;
$tit =~ s/"/"/g;
$tit =~ s/ / /g;
$tit =~ s/&/&/g;
$tit =~ s/([^a-zA-Z0-9_.-])/sprintf("%%%02X",ord($1))/eg;
print "Content-Type: text/plain\n\n";
print "From: $thisfile?mal=$mal&nam=$nam&tit=$tit\n";
print "X-PmailDX-Input: KANJI\n";
print "Content-Type: Text/Plain\n\n";
print "メッセージ入力\n";
exit;
}
elsif ($in{pdxreq} eq 'end') {
print "Content-Type: text/plain\n\n";
print "X-PmailDX-CTRL: LineDisconnect\n";
print "From: $thisfile\n";
print "Content-Type: Text/Plain\n\n";
print "ご利用ありがとうございました。\n";
print "情報サービスコンテンツに接続する際に";
print "件名(Subject)に名前、本文に内容を書けば";
print "オフラインから投稿できます。\n";
exit;
}
$in{mes} = $in{pdxdata};
$in{mal} =~ s/\r|\n//g;
$in{nam} =~ s/\r|\n//g;
$in{tit} =~ s/\r|\n//g;
}
if ($in{vnm}) { $vnm = $in{vnm}; }
$vnm ||= 5;
if ($in{pnm}) { $pnm = $in{pnm}; } else { $pnm = 1; }
if ($in{sch}) { $sch = $in{sch}; }
elsif (length($sch) == 1) {
$msg .= "検索語が短すぎます。 ";
$sch = '';
return 1;
}
if ($in{nam}) { $cnam = $in{nam}; }
if ($in{mal} =~ /[\w\.\_\-]+\@[\w\.\_\-]+/) {
$cmal = $in{mal};
} elsif ($in{nam}) { $cmal = ''; }
if ($in{url} =~ /http:\/\/[\w\.\_\~\-\/\?\&\+\=\:\%\;\,]+/) {
$curl = $in{url};
$curl =~ s/^http:\/\///;
} elsif ($in{nam}) { $curl = ''; }
if ($in{ico}) { $cico = $in{ico}; }
if ($in{tit}) { $ctit = $in{tit}; }
if ($in{mes}) { $cmes = $in{mes}; }
if ($in{adm}) { $cadm = $in{adm}; }
if ($mobile) { $cico = "&$mobile"; }
$cico =~ s/&/&/;
foreach ($cmes,$cadm) {
s/\r//g;
s/\n\n[\n]+/\n\n\n/g;
s/^\n+//g;
s/(\n| | | )+$//g;
s/\n/ /g;
}
foreach ($cmal,$curl) {
s/^( | | )+//g;
s/( | | )+$//g;
}
$ctim = time();
$cipa = $ENV{'REMOTE_ADDR'};
$crmh = $ENV{'REMOTE_HOST'};
$crmh ||= gethostbyaddr(pack('C4',split(/\./,$cipa)),2);
$crmh =~ tr/\r\n/ /;
$ckey ||= substr(crypt($ctim,rand(100)),-4,4);
$ckey =~ s/\,//;
if (length($cnam) > 40) {
$cnam = '';
$msg .= "名前が長すぎます。 ";
}
if (length($ctit) > 160) {
$ctit = '';
$msg .= "タイトルが長すぎます。 ";
}
if (length($cmes) > 1200) {
$cmes = '';
$msg .= "内容が長すぎます。 ";
}
if ($cnam && $cmes) {
if (!$ecut) { foreach ($cnam,$ctit,$cmes) { $_ = &CUT_EMOJI($_); } }
$input = "$cnam,$cmal,$curl,$cico,$ctit,$cmes,$cadm,$ctim,$cipa,$crmh";
}
if ($in{use}) { $use = $in{use}; }
if ($in{bak}) { $bak = $in{bak}; }
if ($in{ade}) { $ade = $in{ade}; }
if ($in{enm}) { $enm = $in{enm}; }
if ($in{edt}) { $edt = $in{edt}; }
if ($in{del}) { $del = $in{del}; }
if ($in{pas}) { $pas = $in{pas}; }
if ($in{pky}) { $pky = $in{pky}; }
if ($in{ivw}) { $ivw = $in{ivw}; }
}
#--------------------------------------------------------------------------
# [ I/O ]
sub IO {
&LOCK_FILE("$logfile.1.txt");
&LOCK_FILE("$logfile.2.txt");
if ($input || $edt) {
open (OLD,"<$logfile") or &DIE("ログファイルが開けません。");
open (NEW, "+>$logfile.tmp") or &DIE("一時ファイルが開けません。");
if ($edt) {
while ($log = ) {
if ($edt == (split(/,/,$log))[0]) {
$key = (split(/,/,$log))[1];
$adm = (split(/,/,$log))[8];
$tim = (split(/,/,$log))[9];
$ipa = (split(/,/,$log))[10];
$rmh = (split(/,/,$log))[11];
if ($input && $master) {
if ($del) { $log = ''; }
else {
$log = "$edt,$key,$input\n";
@log = split(/,/,$log);
$log[9] = $tim;
$log[10] = $ipa;
$log[11] = $rmh;
$log = join(",",@log);
}
}
elsif ($input && ($ckey eq $key) && ($tim > time() - $limit * 60)) {
if ($del) { $log = ''; }
else {
$log = "$edt,,$input\n";
@log = split(/,/,$log);
$log[8] = $adm;
$log[9] = $tim;
$log[10] = $ipa;
$log[11] = $rmh;
$log = join(",",@log);
}
}
print NEW "$log";
$logsize += length($log);
last;
}
print NEW "$log";
$logsize += length($log);
}
} else {
$log = ;
$cnum = (split(/,/,$log))[0] + 1;
$tmp = (split(/,/,$log))[7];
if ($cmes ne $tmp) { $log = "$cnum,$ckey,$input\n$log"; }
print NEW "$log";
$logsize += length($log);
}
while ($log = ) {
if (($logmax < 0) || ($logsize <= $logmax * 1024)) {
print NEW "$log";
$logsize += length($log);
}
}
close (NEW);
close (OLD);
rename ("$logfile.tmp","$logfile") or &DIE("ファイル名変更失敗");
}
open (LOG,"<$logfile") or &DIE("ログファイルが開けません。");
$dnm++ while ();
$pmx = int(($dnm - 1) / $vnm) + 1;
if ($pnm > $pmx) { $pnm = $pmx; }
$dmx = $vnm * $pnm;
if ($dmx > $dnm) { $dmx = $dnm; }
$dmn = $vnm * ($pnm - 1) + 1;
seek (LOG,0,0);
$tmp = 0;
if ($sch || $enm) {
while ($log = ) {
if (&SEARCH) {
$tmp++;
chomp $log;
if ($tmp <= $dmx) { push(@print,$log); }
if ($#print >= $vnm) { shift(@print); }
}
}
} else {
while ($log = ) {
$tmp++;
chomp $log;
if (($tmp >= $dmn) && ($tmp <= $dmx)) { push(@print,$log); }
}
}
$dnm = $tmp;
if(!$enm && $sch) {
if($dnm) { $msg .= "$dnm件の記事にヒットしました。 "; }
else { $msg .= "該当する記事はありませんでした。 "; }
$msg .= "検索終了 ";
}
close (LOG);
&UNLOCK_FILE("$logfile.1.txt");
&UNLOCK_FILE("$logfile.2.txt");
# メール送信
if ($input && !$edt && $mailpath) {
$to ||= $adminmail;
$ml = "To: $to\n";
$ml .= "From: $adminmail\n";
$ml .= "Subject: " . &MAIL64("$bbstitle [$cnum]");
$ml .= "Content-Type: text/plain\; charset=\"iso-2022-jp\"\n\n";
$ml .= "投稿者: $cnam";
if ($cmal) { $ml .= " <$cmal>"; }
$ml .= "\n";
if ($curl) { $ml .= "URL: http://$curl\n"; }
$ml .= "内 容: ";
if ($ctit) { $ml .= "$ctit"; }
$ml .= "\n$cmes";
$ml =~ s/ /\n/g;
$ml =~ s/"/"/g;
$ml =~ s/<//g;
$ml =~ s/,/,/g;
$ml =~ s/ / /g;
$ml =~ s/&/&/g;
&jcode::convert(\$ml,'jis');
open (MAIL, "| $mailpath -t");
print MAIL "$ml\n";
close (MAIL);
}
($cnum,$ctit,$cmes,$cadm,$ctim,$cipa,$crmh) = ();
$pmx = int(($dnm - 1) / $vnm) + 1;
if ((!$enm) && ($pnm > $pmx)) { $pnm = $pmx; }
if ($pnm != 1) { $next = $pnm - 1; }
if ($pnm != $pmx) { $prev = $pnm + 1; }
}
#--------------------------------------------------------------------------
# [ ファイルロック ]
sub LOCK_FILE {
my($lockfile) = $_[0];
my($retry) = 5;
while (-f $lockfile) {
for ($retry-- <= 0) {
if ((stat($lockfile))[9] < time() - 120) { &UNLOCK_FILE($lockfile); }
&DIE("混雑しております。しばしお待ちを。");
}
sleep 1;
}
open (LOCK,">$lockfile");
close(LOCK);
return 1;
}
#--------------------------------------------------------------------------
# [ ファイルロック解除 ]
sub UNLOCK_FILE {
unlink($_[0]);
}
#--------------------------------------------------------------------------
# [ 検索 ]
sub SEARCH {
my($num,$key,$nam,$mal,$url,$ico,$tit,$mes,$adm,$tim) = split(/,/,$log);
if ($enm) { if ($enm == $num) { return 1; } else { return 0; } }
elsif (!$sch) { return 1; }
if ($sch =~ /\[(\d+)\]/) { if ($num <= $1) { return 1; } }
elsif (($sch =~ /\//) && ($sch =~ /^[\d\/]{3,10}$/)) {
@sch = split(/\//,$sch);
my($ye,$mo,$da);
$da = $sch[-1];
$mo = $sch[-2];
$ye = $sch[-3];
$mo = substr($mo,-2,2);
$da = substr($da,-2,2);
$mo = sprintf("%02d",$mo);
$da = sprintf("%02d",$da);
if ($ye) {
$ye = substr($ye,-2,2);
if ($ye == 99) { $ye = "19$ye"; } else { $ye = "20$ye"; }
}
else {
$ye = &GET_DATE('yyyy');
$sch = "$mo/$da";
if (&GET_DATE('MM/dd') lt $sch) { $ye--; }
}
$sch = "$ye/$mo/$da";
if (&GET_DATE('yyyy/MM/dd',$tim) le $sch) { return 1; }
}
else {
$swrd = $sch;
$swrd =~ s/\\/\\\\/go;
$swrd =~ s/([\|\(\)\[\]\{\}\^\$\+\-\*\/\?\.])/\\$1/go;
foreach $_ ($nam,$tit,$mes,$adm) {
if ($_ =~ /$swrd/go) { return 1; }
}
}
}
#--------------------------------------------------------------------------
# [ 日付の取得 ]
sub GET_DATE {
my($timeformat,$time,$lang) = @_;
my($s,$ss,$m,$mm,$H,$HH,$h,$hh,$d,$dd,$M,$MM,$yyyy,$yy,$DDD,$t);
$timeformat ||= 'yyyy/MM/dd HH:mm';
$time ||= time();
$ENV{'TZ'} = "JST-9";
($s,$m,$H,$d,$M,$yyyy,$DDD) = localtime($time);
$yyyy += 1900;
if ($H < 12) { $t = 0; } else { $t = 1; }
if ($lang eq 'en') {
$DDD = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$DDD];
$M = ('Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec')[$M];
$timeformat =~ s/MM/M/g;
$t = ('a.m.','p.m.')[$t];
} else {
$DDD = ('日','月','火','水','木','金','土')[$DDD];
$M++;
$MM = sprintf("%02d",$M);
$t = ('午前','午後')[$t];
}
$h = $H % 12;
$yy = substr($yyyy,2,2);
$dd = sprintf("%02d",$d);
$HH = sprintf("%02d",$H);
$hh = sprintf("%02d",$h);
$mm = sprintf("%02d",$m);
$ss = sprintf("%02d",$s);
$timeformat =~ s/yyyy/$yyyy/ig;
$timeformat =~ s/yy/$yy/g;
$timeformat =~ s/HH/$HH/g;
$timeformat =~ s/H/$H/g;
$timeformat =~ s/hh/$hh/g;
$timeformat =~ s/h/$h/g;
$timeformat =~ s/mm/$mm/g;
$timeformat =~ s/m/$m/g;
$timeformat =~ s/ss/$ss/ig;
$timeformat =~ s/s/$s/ig;
$timeformat =~ s/t/$t/ig;
$timeformat =~ s/MM/$MM/g;
$timeformat =~ s/M/$M/g;
$timeformat =~ s/dd/$dd/g;
$timeformat =~ s/d/$d/g;
$timeformat =~ s/DDD/$DDD/ig;
return "$timeformat";
}
#--------------------------------------------------------------------------
# [ 絵文字の除去 ]
sub CUT_EMOJI {
# sjisから他の文字コードに変換する前に使用すること
$_[0] =~ s/\G((?:[\x80-\x9f\xe0-\xf7\xfa-\xfc][\x40-\xff]|[\x00-\x7f])*?)([\xf8\xf9][\x40-\xff]|[\xf0-\xf4][\x40-\xff])/$1/g;
return $_[0];
}
#--------------------------------------------------------------------------
# [ 絵文字の10進コードへの置き換え ]
sub REP_EMOJI {
# sjisから他の文字コードに変換する前に使用すること
$_[0] =~ s/\G((?:[\x80-\x9f\xe0-\xf7\xfa-\xfc][\x40-\xff]|[\x00-\x7f])*?)([\xf8\xf9][\x40-\xff]|[\xf0-\xf4][\x40-\xff])/$1.''.(ord($2)*256+ord(substr($2,1,1))).';'/eg;
return $_[0];
}
#--------------------------------------------------------------------------
# [ BASE64エンコード ]
sub MAIL64 {
local($xx) = $_[0];
&jcode::convert(\$xx,'jis');
$xx =~ s/\x1b\x28\x42/\x1b\x28\x4a/g;
$xx = &BASE64($xx);
return("=?iso-2022-jp?B?$xx?=\n");
}
sub BASE64 {
my($base) = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
. "abcdefghijklmnopqrstuvwxyz"
. "0123456789+/";
local($xx, $yy, $zz, $i);
$xx = unpack("B*", $_[0]);
for ($i = 0; $yy = substr($xx, $i, 6); $i += 6) {
$zz .= substr($base, ord(pack("B*", "00" . $yy)), 1);
if (length($yy) == 2) {
$zz .= "==";
} elsif (length($yy) == 4) {
$zz .= "=";
}
}
return($zz);
}
#--------------------------------------------------------------------------
# [ エラー ]
sub DIE {
&HTML_HEADER;
print "\n";
print "エラー \n";
print "$_[0] \n";
print "\n";
&HTML_FOOTER;
}
|