#!/usr/bin/perl
#-------------------------------------------------------------------------------
# 必須設定。
#-------------------------------------------------------------------------------
$script = './index.cgi'; # このスクリプトのファイル名
# --- 以上二つはURL指定
$logfile = './log.dat'; # ログ保存ファイル
$template = './TEMPLATE.html'; # 表示用テンプレートファイル
$jcode = './jcode.pl'; # jcode.plの場所
# --- 以上三つは相対or絶対パス指定
$password = 'aQuqly'; # 管理者モードパスワード *必ず変更する!!
#-------------------------------------------------------------------------------
# 各種カスタマイズ項目
#-------------------------------------------------------------------------------
$d_max = 10; # デフォルト表示件数
$max = 50; # 最大記録件数
$link = 'on'; # オートリンク機能のon/off
$target = ' target="_blank"'; # オートリンク時のターゲット属性
$link_max = 40; # オートリンク時の見かけのURLの長さ制限
#-------------------------------------------------------------------------------
# 日付時刻
#-------------------------------------------------------------------------------
# 日付表示フォーマット(運用中でも変更が反映されます)
$date = '%Y年%m月%d日';
# 詳細はマニュアル参照。
# 以前の設定はこうなります
# en xxxx/xx/xx xx:xx:xx => $date ='%Y/%m/%d %H:%I:%S';
# en2 xxxx/xx/xx => $date ='%Y/%m/%d';
# jp xxxx年xx月xx日 xx時xx分xx秒 => $date ='%Y年%m月%d日 %H時%I分%S秒';
# jp2 xxxx年xx月xx日 => $date ='%Y年%m月%d日';
# pp xx月 xxにち (ポスぺ風)=> $date ='%m月 %dにち';
@month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); # 月のテキスト形式指定
@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); # 曜日のテキスト形式指定
@m = ('am','pm'); # 午前/午後
#-------------------------------------------------------------------------------
# セキュリティ関連
#-------------------------------------------------------------------------------
@tag = ('b','font','img','a','div','br','p'); # 有効タグ。「'」でくくり「,」で区切る。<,>は不要。
$style = 'on'; # タグのstyle,class,id属性を有効にするとき on。
$jscript = 'off'; # タグのJAVAスクリプト属性(onClickとか)を有効にするとき on。
$max_length = 65535; # 最大入力バイト数。0だと無制限。
#-------------------------------------------------------------------------------
# そのほか
#-------------------------------------------------------------------------------
$method = 'post'; # FORMのMETHOD属性を指定(通常はPOST)
$form_html = './form.txt'; # 拡張フォーム設定ファイル
$tz = 9; # 海外サーバなど時刻がずれる時のみ変更してください
# 設定ここまで------------------------------------------------------------------
# ファイルチェック
open(LOG,$logfile) || &error("$logfileが open できません。");
@lines = <LOG>; close(LOG);
$log_lines = $#lines; @lines = ();
open(IN,$template) || &error("$templateが open できません。"); close(IN);
&readform;
# 条件分岐
® if $form{'action'} eq 'regist'; #書き込み
&admin if $form{'action'} eq 'admin'; #管理者モード
&log;
sub reg{
# パスワードチェック
$bad_pass = "パスワードが違います。";
&error($bad_pass) if $form{'password'} ne $password;
&code_conv;
# 呼び出し元エラー
# IEが嘘リファーを吐くので、上手く機能しない…
# $reffer = $ENV{'HTTP_REFERER'};
# $reffer =~ s/\%7E/\~/g;
# &error('不正なアクセスです。') if ($URL ne '') and ($reffer !~ /$URL/);
$form{'Write_Time'} = time; #日時取得
if($form{year}){&check_date($form{year}, $form{mon}, $form{day}, $form{hour}, $form{min}, $form{sec}); }
delete $form{year}; delete $form{mon}; delete $form{day};
delete $form{sec}; delete $form{min}; delete $form{hour};
$form{ip} = $ENV{REMOTE_ADDR}; #IPアドレス
&error('内容が未記入です。') if $form{'note'} eq ''; #内容なしエラー
$form{'note'} = &change($form{'note'});
#保存に不要な値を削除
delete $form{'action'};
delete $form{'password'};
# ログに書き込む
open(LOG, "+< $logfile"); # 読み書きモードで開く
eval("flock(LOG, 2)"); # ファイルをロックする
@data = <LOG>;
$value = join("<>",%form);
unshift (@data, "$value\n");
@data = splice(@data,0,$max);
$log_lines = $#data; # 行数読みなおし
@data = &sort_log(@data);
truncate(LOG, 0); # ファイルの古い内容をクリア
seek(LOG, 0, 0); # 書き込み位置を先頭に戻す
print LOG @data; # 値を書き込む
close(LOG); # ファイルを閉じる
if($imode){&imode;
}else{&log;}
}
# ログ表示
sub log{
$page{max} = $max;
$page{script} = $script;
$page{method} = $method;
if(($form{start} =~ \D) or ($form{start} < 1)){
$page{start} = 1 ;
}else{ $page{start} = $form{start}; }
if(($form{d_max} =~ \D) or (!$form{d_max})){
$page{d_max} = $d_max ;
$form{d_max} = $page{d_max};
}else{ $page{d_max} = $form{d_max}; }
# NEXTのURL
if ($page{'start'} > 1){
$page{'next'} = "$script";
if($page{'start'}-$d_max > 0){
$page{'next'} .= "?start=" . ($page{'start'}-$d_max);
}
}
# PREVのURL
if($page{'start'} + $d_max <= $log_lines +1){
$page{'prev'} = "$script?start=";
$page{'prev'} .= $page{'start'}+$d_max;
}
print "Content-type: text/html\n";
print "Pragma: no-cache\n\n";
# テンプレート読みこみ
$. = 0; # 行数初期化
open(IN,$template);
$locate = \@header;
while(<IN>){
if (/<!-- start_log -->/) { $locate = \@table; next; }
if (/<!-- end_log -->/) { $locate = \@footer; next; }
s/\$(form|page)\{(.+?)\}/${$1}{$2}/g; # 変数置き換え
s/<(a|A) (href|HREF)="".*?>(.*?)<\/(a|A)>/$3/g; # 空Aタグ削除
push(@$locate,$_);
}
close(IN);
print @header;
# ログの値を<!-- start_log -->から<!-- end_log -->までに代入
$. = 0; # 行数初期化
open(LOG,$logfile);
while(<LOG>){
next if($. < $page{'start'});
$log{date} = '';
%log = split(/<>/,$_);
chomp(%log);
if(!$log{'date'}){$log{date} = &Write_Time_to_date($log{'Write_Time'});}
$log{'date'} = &date($log{date});
$table = join('',@table);
$table =~ s/\$log\{(.+?)\}/$log{$1}/g;
$table =~ s/<(a|A) (href|HREF)="(|mailto:)".*?>(.*?)<\/(a|A)>/$4/g;
print $table;
last unless(-- $form{d_max});
}
close(LOG);
print @footer;
exit;
}
# 管理者モード
sub admin{
#携帯書き込みフォーム
if($imode){&imode_form;}
# パスワードチェック
$bad_pass = <<END;
パスワードが違います。<P>
<FORM METHOD="$method" ACTION="$script">
<INPUT TYPE="PASSWORD" NAME="password" SIZE="8">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="admin">
<INPUT TYPE="SUBMIT" VALUE="再入力"></FORM>
END
&no_pass if(!$form{'password'});
&error($bad_pass) if $form{'password'} ne $password;
if($form{mode}){
&error('ログが選択されていません。') if(!$form{'Write_Time'});
open(LOG, "+< $logfile"); # 読み書きモードで開く
eval("flock(LOG, 2)"); # ファイルをロックする
@data = <LOG>;
my $check = '';
foreach(@data) {
%log = split(/<>/,$_); chomp(%log);
if ($log{'Write_Time'} eq $form{'Write_Time'}){
$check = 'ok';
if($form{'mode'} eq 'del'){
}else{
&error('内容が未記入です。') if $form{'note'} eq ''; #内容なしエラー
$form{'note'} = &change($form{'note'});
if($form{year}){&check_date($form{year}, $form{mon}, $form{day}, $form{hour}, $form{min}, $form{sec});}
delete $form{year}; delete $form{mon}; delete $form{day};
delete $form{sec}; delete $form{min}; delete $form{hour};
delete $form{'action'};
delete $form{'password'};
delete $form{mode};
$value = join('<>',%form) . "\n";
push(@new,$value);
}
}else{push(@new,$_);}
}
&error('該当するログが見つかりません。') if $check ne 'ok';
$log_lines = $#new; # 行数読みなおし
@new = &sort_log(@new);
truncate(LOG, 0); # ファイルの古い内容をクリア
seek(LOG, 0, 0); # 書き込み位置を先頭に戻す
print LOG @new; # 値を書き込む
close(LOG); # ファイルを閉じる
#ファイルロックの方法は「とほほのWWW入門」の「ファイルのロックに関する基礎知識」
#(http://wakusei.cplaza.ne.jp/twn/wwwcgi8.htm)を参考にさせていただいてます。
#非UNIX系サーバ(というか、非flock)でのロック方法はイロイロ模索中…
}
if(($form{start} =~ \D) or (!$form{start})){
$page{start} = 1 ;
}else{ $page{start} = $form{start}; }
if(($form{d_max} =~ \D) or (!$form{d_max})){
$page{d_max} = $d_max ;
$form{d_max} = $page{d_max};
}else{ $page{d_max} = $form{d_max}; }
$log{'date'} = &date(&Write_Time_to_date(time));
$title = '【現在募集中の仕事】';
$body = '<h2>管理者専用モード</h2>' . "\n";
$body = '<p>記事の新規書きこみ・修正・削除を実行します。</p>' . "\n";
$body .= qq|<FORM METHOD="POST" ACTION="$script">\n|;
$body .= qq|<input type="hidden" size="10" name="password" value="$password">\n|;
$body .= qq|<INPUT TYPE="HIDDEN" NAME="action" VALUE="regist">\n|;
$body .= '<INPUT TYPE="TEXT" NAME="year" SIZE="4">年'
.'<INPUT TYPE="TEXT" NAME="mon" SIZE="2">月'
.'<INPUT TYPE="TEXT" NAME="day" SIZE="2">日'
.'<INPUT TYPE="TEXT" NAME="hour" SIZE="2">時'
.'<INPUT TYPE="TEXT" NAME="min" SIZE="2">分'
.'<INPUT TYPE="TEXT" NAME="sec" SIZE="2">秒';
$body .= '<P>西暦/24時間表記/半角数字で入力してください。<br>';
$body .= '※省略した場合、現在の日時での書き込みとなります。</P>';
$body .= '<dl>';
if(-r $form_html){
open(IN,$form_html);
while(<IN>){
$body .= $_;
}
close IN;
}
# $body .= qq|<P><textarea name="note" rows="3" cols="60" WRAP="soft"></textarea></P>|;
$body .= '<dt>備考</dt><dd><textarea name="note" rows="3" cols="60" WRAP="soft"></textarea></dd>';
$body .= '</dl>';
$body .= '<P><INPUT TYPE="SUBMIT" VALUE="書き込み"></P></FORM><HR>';
$. = 0; # 行数初期化
open(LOG,$logfile);
while(<LOG>){
next if($. < $page{'start'});
%log = split(/<>/,$_);
chomp(%log);
$body .= <<HTML;
<FORM METHOD="$method" ACTION="$script">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="admin">
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$password">
<INPUT TYPE="HIDDEN" NAME="Write_Time" VALUE = "$log{Write_Time}">
HTML
# 逆オートリンク。試行錯誤中
$log{note} =~ s/<A HREF="(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)"$target>\1<\/A>/$1/gi;
$log{note} =~ s/<A HREF="mailto:([\w\.\-]+)\@([\w\.\-]+)">\1\@\2<\/A>/$1\@$2/gi;
$log{note} =~ s/<BR>/\n/g;
$log{note} =~ s/</</g;
$log{note} =~ s/>/>/g;
$body .= "<TABLE BORDER=\"0\" CELLSPACING=\"2\" CELLPADDING=\"3\">\n";
$body .= "<TR><TD class=\"key\">日時</TD><TD class=\"value\">\n";
if(!$log{date}){$log{date} = &Write_Time_to_date($log{Write_Time});}
($log{year}, $log{mon}, $log{day}, $log{hour}, $log{min}, $log{sec}) = split(/,/,$log{date});
$log{year} += 1900; $log{mon} += 1;
$body .= qq|<INPUT TYPE="TEXT" NAME="year" SIZE="4" VALUE="$log{year}" class="mini">年
<INPUT TYPE="TEXT" NAME="mon" SIZE="2" VALUE="$log{mon}" class="mini">月
<INPUT TYPE="TEXT" NAME="day" SIZE="2" VALUE="$log{day}" class="mini">日
<INPUT TYPE="TEXT" NAME="hour" SIZE="2" VALUE="$log{hour}" class="mini">時
<INPUT TYPE="TEXT" NAME="min" SIZE="2" VALUE="$log{min}" class="mini">分
<INPUT TYPE="TEXT" NAME="sec" SIZE="2" VALUE="$log{sec}" class="mini">秒</TD></TR>|;
delete $log{note};
delete $log{date};
delete $log{Write_Time};
delete $log{ip};
delete $log{year}; delete $log{mon}; delete $log{day};
delete $log{hour}; delete $log{min}; delete $log{sec};
# foreach (keys %log){
# $body .= "<TR><th class=\"key\">$_</th>\n";
# $body .= "<TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{$_}\" NAME=\"$_\"></TD></TR>\n";
# }
$body .= "<TR><td class=\"key\">募集タイトル</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{title}\" NAME=\"title\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">勤務地</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op01}\" NAME=\"op01\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">職種</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op02}\" NAME=\"op02\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">応募資格</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op03}\" NAME=\"op03\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">給与</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op04}\" NAME=\"op04\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">勤務時間</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op05}\" NAME=\"op05\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">勤務開始日</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op06}\" NAME=\"op06\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">待遇</th><TD class=\"value\"><INPUT TYPE=\"text\" SIZE=\"40\" VALUE=\"$log{op07}\" NAME=\"op07\"></TD></TR>\n";
$body .= "<TR><td class=\"key\">備考</TD>\n";
$body .= "<TD class=\"value\"><TEXTAREA ROWS=\"3\" COLS=\"40\" NAME=\"note\">$log{note}</TEXTAREA></TD></TR>\n";
$body .= "</TABLE><P class=\"wd\">\n";
$body .= <<END;
<SELECT NAME="mode">
<OPTION VALUE="edit">■このログを編集
<OPTION VALUE="del">■このログを消去</SELECT>
<INPUT TYPE="SUBMIT" VALUE="■■ 実行 ■■"></P></FORM>
END
last unless(-- $form{d_max});
}
close(LOG);
$body .= <<HTML;
<DIV>
<FORM METHOD="$method" ACTION="$script" class="fm">
最新<INPUT NAME="start" SIZE="2" VALUE="$page{start}">件目から
<INPUT NAME="d_max" SIZE="2" VALUE="$page{d_max}">件分
<INPUT TYPE="HIDDEN" NAME="password" VALUE="$password">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="admin">
<INPUT TYPE="SUBMIT" VALUE="表\示"></FORM></DIV>
<P><A HREF="$script?">公開側ページへ</A></P>
HTML
&print_html($title,$body);
}
# 携帯からの書き込みフォーム
sub imode_form{
if($jsky){$method = 'get';}
if(-r $form_html){
open(IN,$form_html);
while(<IN>){
$add_form = $_;
}
close IN;
}
print "Content-type: text/html\n";
print "Pragma: no-cache\n\n";
print <<END;
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM METHOD="$method" ACTION="$script">
<INPUT TYPE="hidden" NAME="action" VALUE="regist">
<TEXTAREA NAME="note" ROWS="3" COLS="10"></TEXTAREA><BR>
pass : <INPUT TYPE="password" SIZE="8" NAME="password" VALUE="$form{password}"><BR>
$add_form
<INPUT TYPE="submit" VALUE="OK"></FORM>
</BODY></HTML>
END
exit;
}
# 携帯からの書き込み完了画面
sub imode{
$form{note} = substr($form{note},0,50);
print "Content-type: text/html\n";
print "Pragma: no-cache\n\n";
print <<END;
<HTML>
<HEAD>
<TITLE>書き込み完了</TITLE>
</HEAD>
<BODY>
以下の記事を書き込みました。<HR>
$form{date}<BR>$form{note} ....</BODY></HTML>
END
exit;
}
# HTML出力
sub print_html{
($title, $body) = @_;
print "Content-type: text/html\n";
print "Pragma: no-cache\n\n";
print <<END;
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>株式会社ジンフィールド</title>
<meta name="keywords" content="キーワード,キーワード" />
<meta name="description" content="紹介文" />
<link type="text/css" rel='stylesheet' href='../default.css' />
<link type="text/css" rel='stylesheet' href='../style.css' />
<link rel="shortcut icon" href="../img/favicon.ico" />
<script type="text/javascript" src="back.js"></script>
</head>
<body>
<div id="head">
<div id="header">
<a href="../index.html"><img src="../img/logo.jpg" style="position:absolute;top:0;left:0;" /></a>
<a href="../06.html"><img src="../img/t01.jpg" style="position:absolute;top:0;right:164px;" /></a>
<a href="../07.html"><img src="../img/t02.jpg" style="position:absolute;top:0;right:76px;" /></a>
<a href="https://zinfield.sakura.ne.jp/05.html"><img src="../img/t03.jpg" style="position:absolute;top:0;right:0;" /></a>
<img src="../img/tel.jpg" style="position:absolute;bottom:0;right:0;" />
</div><!--header-->
</div><!--head-->
<!--nav-->
<div id="nav">
<ul id="pulldown-menu">
<li style="width:239px;"><a href="../index.html"><img src="../img/n01_3.jpg" alt="株式会社ジンフィールド" /></a></li>
<li style="width:237px;"><a href="../01.html"><img src="../img/n02_3.jpg" alt="総合人材サービス" /></a>
<ul>
<li><a href="../01_1.html"> ▼ お仕事情報</a></li>
<li><a href="../01_3.html"> ・ご紹介までのプロセス</a></li>
<li><a href="http://www.zin.sc/job1/index.cgi"> ・現在募集中のお仕事</a></li>
<li><a href="https://zinfield.sakura.ne.jp/01_2.html"> ・エントリーフォーム</a></li>
<li><a href="../01_6.html"> ▼ 人材をお探しの企業</a></li>
<li><a href="../01_7.html"> ・人材派遣のメリット</a></li>
</ul>
</li>
<li style="width:237px;"><a href="../03.html"><img src="../img/n04_3.jpg" alt="会社概要" /></a></li>
<li style="width:237px;"><a href="https://zinfield.sakura.ne.jp/04.html"><img src="../img/n05_3.jpg" alt="お問合せ" /></a></li>
</ul>
<br style="clear: both;" />
</div>
<!--nav-->
<div id="main">
<p style="margin-top:5px;margin-bottom:10px;"><a href="../index.html"
class="bot_link">Home</a> > <a href="../01.html" class="bot_link">人材派遣</a> > <a href="../01_1.html" class="bot_link">お仕事情報</a> > 現在募集中のお仕事</p>
<img src="../img/01_4.jpg" style="margin:10px 0px 10px 0px;" />
<!-- ********************************* ここから システム **********************************************-->
$body
<!-- ********************************* ここまで システム **********************************************-->
<div id="contents">
<br style="clear:both">
<a href="#" onclick="backToTop(); return false"><img src="../img/back.gif" alt="" style="float:right;" style="margin:30px 0px 0px 0px;" /></a>
</div><!--contents-->
</div><!--main-->
<div id="footer">
<p>Copyright 2010 zinfield. All Rights Reserved. 株式会社ジンフィールド</p>
</div><!--footer-->
</body>
</html>
END
exit;
}
# 書き込み内容の変換
sub change{
my ( $msg, $new, @tmp, $tmp, @options, $options, @text, $text,);
$msg = $_[0];
#改行処理
$msg =~ s/\r\n/\n/g;
$msg =~ s/\r/\n/g;
$/ = ''; chomp $msg; $/ = "\n"; # 行末の空行を除去
$msg =~ s/\n/<BR>/g;
# タグ処理
($new,@tmp) = split(/</,$msg);
$new = &autolink($new);
foreach $tmp (@tmp){
# >がなければタグじゃないとみなしてテキスト処理
if($tmp !~ />/){$tmp = &autolink('<' . $tmp); next;}
($options,@text) = split(/>/,$tmp);
$text = &autolink(join('>',@text)); # >より右はテキスト処理
($tag,@options) = split(/\s|<br>/i,$options); # タグとオプションを分割
# 許可タグ
if(grep(/^$tag$/i,@tag)){
# JavaScript, stylesheet 関連オプションを削除
foreach(@options){
if($style ne 'on'){
if($_ =~ /^(style|class)/i){$_ = '';}
if($jscript ne 'on'){ if($_ =~ /^id/i){$_ = '';}}
}
if($jscript ne 'on'){ if($_ =~ /^on/i){$_ = '';}}
}
$tmp = '<' . join(' ',$tag,@options) . '>' . $text;
# 閉じタグ
}elsif($tag =~ m!^/!){
$tag =~ s!^/!!;
if(grep(/^$tag$/i,@tag)){ # 許可
$tmp = '</' . $tag . '>' . $text;
}else{ $tmp = '</' . &autolink($tag) . '>' . $text;} # 禁止閉じタグ
# 禁止タグ
}else{ $tmp = '<' . &autolink(join(' ',$tag,@options)) . '>' . $text;}
}
$new .= join('',@tmp);
# タグ処理ここまで
return $new;
}
# テキスト部の処理(オートリンク)
sub autolink{
if($link ne 'on'){return $_[0];}
$_[0] =~ s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/&url($1)/gie;
$_[0] =~ s/([\w\.\-]+)\@([\w\.\-]+)/<A HREF="mailto:$1\@$2">$1\@$2<\/A>/ig;
return $_[0];
}
sub url{
if(length($_[0]) > $link_max){
$short = substr($_[0],0,$link_max);
return qq|<A HREF="$_[0]"$target>$short...<\/A>|;
}else{
return qq|<A HREF="$_[0]"$target>$_[0]<\/A>|;
}
}
# 日付表示
sub date{
my ($year, $mon, $mday, $hour, $min, $sec) = split(/,/,$_[0]);
$w = &zeller($year +1900, $mon +1, $mday);
$log_date = $date;
$log_date =~ s/%Y/$year + 1900/ge;
$log_date =~ s/%y/substr($year + 1900,-2)/eg;
$log_date =~ s/%M/$month[$mon]/eg;
$log_date =~ s/%m/sprintf("%02d",$mon + 1)/eg;
$log_date =~ s/%n/$mon + 1/eg;
$log_date =~ s/%d/sprintf("%02d",$mday)/eg;
$log_date =~ s/%j/$mday/eg;
$log_date =~ s/%D/$week[$w]/eg;
if($hour >= 12){ $hhour = $hour-12; $m = 1;}else{$hhour = $hour;}
$log_date =~ s/%h/sprintf("%02d",$hhour)/eg;
$log_date =~ s/%H/sprintf("%02d",$hour)/eg;
$log_date =~ s/%g/$hhour/eg;
$log_date =~ s/%G/$hour/eg;
$log_date =~ s/%a/$m[$m]/eg;
$log_date =~ s/%I/sprintf("%02d",$min)/eg;
$log_date =~ s/%i/$min/eg;
$log_date =~ s/%S/sprintf("%02d",$sec)/eg;
$log_date =~ s/%s/$sec/eg;
return $log_date;
}
sub readform{
if ($ENV{'REQUEST_METHOD'} eq "POST") {
if(($ENV{'CONTENT_LENGTH'} > $max_length)and($max_length)){ &error("入力文字数が多すぎます。");}
read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
} else {
if(($ENV{'QUERY_STRING'} > $max_length)and($max_length)){ &error("入力文字数が多すぎます。");}
$formdata = $ENV{'QUERY_STRING'};
}
@pears = split(/&|;/,$formdata);
foreach (@pears) {
($name,$value) = split(/=/,$_);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$value =~ s/</</g;
$value =~ s/>/>/g;
$form{$name} = $value;
}
if($ENV{HTTP_USER_AGENT} =~ /^DoCoMo/){
$imode = 1;
}elsif($ENV{HTTP_USER_AGENT} =~ /^J-PHONE/){
$imode = 1; $jsky=1;
}
}
sub code_conv{
require $jcode;
while (($key, $value) = each(%form)) {
#絵文字除去
if ($imode) {
if ($jsky) {
$value =~ s/\x1B\$(?:..)+\x0F//g; # j-sky絵文字除去
}else{
my $sjis = '[\x80-\x9F\xE0-\xF7\xFA-\xFC][\x40-\xFF]|[\x00-\x7F]';
my $emoji_i = '[\xF8\xF9][\x40-\x7E\x80-\xAF]';
$value =~ s/\G((?:$sjis)*?)(?:$emoji_i)/$1/go;
# i-mode絵文字除去
}
&jcode'h2z_sjis(*value);
} else {
#&jcode'convert(*value,'sjis');
}
$form{$key} = $value;
}
}
# 曜日を求めるツェラーの公式
sub zeller{
my($year, $mon, $mday) = @_;
if ($mon == 1 or $mon == 2) {
$year--;
$mon += 12;
}
int($year + int($year / 4) - int($year / 100) + int($year / 400) + int((13 * $mon + 8) / 5) + $mday) % 7;
}
sub Write_Time_to_date{
my ($sec, $min, $hour, $mday, $mon, $year) = gmtime($_[0] + $tz*60*60);
return sprintf("%03d,%02d,%02d,%02d,%02d,%02d",$year, $mon, $mday, $hour, $min, $sec);
}
sub check_date{
foreach(@_){
$_ += 0;
}
my ($year, $mon, $day, $hour, $min, $sec) = @_;
# 月末日を知る。Perlメモより
my $lastday = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$mon-1]
+ ($mon == 2 and $year % 4 == 0 and
($year % 400 == 0 or $year % 100 != 0));
if( ($year < 1900) or
($mon > 12) or
($mon < 0) or
($day < 1) or
($day > $lastday) or
($hour < 0) or
($hour > 24) or
($min < 0) or
($min > 60) or
($sec < 0) or
($sec > 60) ){
&error("入力日時が不正です");
}
$year -= 1900;
$mon -= 1;
$form{date} = sprintf("%03d,%02d,%02d,%02d,%02d,%02d", $year, $mon, $day, $hour, $min, $sec);
}
sub sort_log{
my @data = @_;
@data = sort {
my %loga = split(/<>/, $a); chomp(%loga);
my %logb = split(/<>/, $b); chomp(%logb);
if(!$loga{date}){$loga{date} = &Write_Time_to_date($loga{Write_Time});}
if(!$logb{date}){$logb{date} = &Write_Time_to_date($logb{Write_Time});}
$logb{date} cmp $loga{date};
} @data;
return @data;
}
sub no_pass{
$title = '【現在募集中の仕事】';
$body = <<END;
<h3>最新情報管理画面</h3>
<FORM METHOD="$method" ACTION="$script" class="fm">
<p>パスワードを入力してください。 <INPUT TYPE="PASSWORD" NAME="password" SIZE="15"><INPUT TYPE="HIDDEN" NAME="action" VALUE="admin">
<INPUT TYPE="SUBMIT" VALUE="入力">
</p>
</FORM>
END
&print_html($title,$body);
}
# エラー処理
sub error {
$title= 'Error!';
$body = <<END;
<strong style="color:#f00;">$_[0]</strong>
END
&print_html($title,$body);
}