研究の息抜きに組んでみようと考えたら案外とても厄介でした。
素直に後何日って表示すればいいものを
あと〇ヶ年〇ヶ月と〇日って書くものだから
日付がマイナスになるんですよ^^;
0ヶ年1ヶ月と-4日
ってな風になって解決する為にスクリプトが長くなってしましました(汗
ループとか使えばもっと短くなったかも知れませんね(汗
勉強が必要ですm(_ _)mペコリ
実際の動作風景
http://www.orsp.net/~orbit/cgi-bin/win.cgi
#!/usr/bin/perl
###########################################
#ファイル名:win.cgi
#作者:ORBIT
# <hp URL>
# http://www.orsp.net/blog/
#
# <目的と機能>
#ユーザーが指定した予定日まで
#カウントダウンするスクリプト
#
# <著作権に関して>
#2009年10月23日を過ぎた時点で完全に破棄します。
#上記の日付を過ぎている場合は
#目的に応じ自由にカスタムしてかまいません。
###########################################
#---------
#各種設定
#---------
#CGIまでのURL
$win = "http://www.orsp.net/~orbit/cgi-bin/win.cgi";
#HPまでのURL
$url = "http://www.orsp.net/blog";
#ページタイトル
$mane = "専修大学 AO入試までのカウントダウン";
#予定時間のタイトル
$index0 = "現在";
$index1 = "AO入試説明会";
$index2 = "出願期間(〆切)";
$index3 = "第1次選考";
$index4 = "第2次選考";
$index5 = "合格発表";
#予定時間
$time1 = "2009<>7<>25\n";
$time2 = "2009<>9<>10\n";
$time3 = "2009<>10<>2\n";
$time4 = "2009<>10<>17\n";
$time5 = "2009<>10<>23\n";
#カレンダー (2009)
my $days_1 ="31";
my $days_2 ="28";
my $days_3 ="31";
my $days_4 ="30";
my $days_5 ="31";
my $days_6 ="30";
my $days_7 ="31";
my $days_8 ="31";
my $days_9 ="30";
my $days_10 ="31";
my $days_11 ="30";
my $days_12 ="31";
#現時間の取得
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime( );
#西暦へ変換
$year += 1900;
$mon++;
$tomon = $mon;
$today = $mday;
$now = sprintf("$index0:\t%s/%s/%s",$year,$tomon,$today);
#------------------------------------
#指定された予定日までをカウントダウン
#------------------------------------
#スラッシュを消去し予定日1日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time1);
#現在の時間と現在の時間を比較し減算
$YY -= $year;
$MM -= $mon;
$DD -= $mday;
#日付けにマイナスが付く場合修正
if ($MM < 0){&minus_MM};
if ($DD < 0){&minus_DD};
#文字列の整形し変数に格納
$time_1 = sprintf("$index1:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);
#予定日を過ぎた場合の処理
if ($time_1 =~ /-/){$time_1 = "$index1:\tカウント終了"};
#スラッシュを消去し予定日2日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time2);
#現在の時間と現在の時間を比較し減算
$YY -= $year;
$MM -= $mon;
$DD -= $mday;
#日付けにマイナスが付く場合修正
if ($MM < 0){&minus_MM};
if ($DD < 0){&minus_DD};
#文字列の整形し変数に格納
$time_2 = sprintf("$index2:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);
#予定日を過ぎた場合の処理
if ($time_2 =~ /-/){$time_2 = "$index2:\tカウント終了"};
#スラッシュを消去し予定日3日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time3);
#現在の時間と現在の時間を比較し減算
$YY -= $year;
$MM -= $mon;
$DD -= $mday;
#日付けにマイナスが付く場合修正
if ($MM < 0){&minus_MM};
if ($DD < 0){&minus_DD};
#文字列の整形し変数に格納
$time_3 = sprintf("$index3:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);
#予定日を過ぎた場合の処理
if ($time_3 =~ /-/){$time_3 = "$index3:\tカウント終了"};
#スラッシュを消去し予定日4日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time4);
#現在の時間と現在の時間を比較し減算
$YY -= $year;
$MM -= $mon;
$DD -= $mday;
#日付けにマイナスが付く場合修正
if ($MM < 0){&minus_MM};
if ($DD < 0){&minus_DD};
#文字列の整形し変数に格納
$time_4 = sprintf("$index4:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);
#予定日を過ぎた場合の処理
if ($time_4 =~ /-/){$time_4 = "$index4:\tカウント終了"};
#スラッシュを消去し予定日5日目の処理を開始
($YY, $MM, $DD) = split(/<>/,$time5);
#現在の時間と現在の時間を比較し減算
$YY -= $year;
$MM -= $mon;
$DD -= $mday;
#日付けにマイナスが付く場合修正
if ($MM < 0){&minus_MM};
if ($DD < 0){&minus_DD};
#文字列の整形し変数に格納
$time_5 = sprintf("$index5:\t%sヶ年%sヶ月と%s日",$YY,$MM,$DD);
#予定日を過ぎた場合の処理
if ($time_5 =~ /-/){$time_5 = "$index5:\tカウント終了"};
#---------
#HTML出力
#---------
#HTMLで出力
print "Content-type: text/html;charset=EUC-JP\n\n";
print <<eod
<html>
<head>
<title>$mane</title>
</head>
<body>
<h1>$mane</h1>
<font SIZE="6">$now</font><br />
<br />
<font SIZE="5"><b><i><a href="$win">RELOAD</a></b></i></font><br />
<font SIZE="6">$time_1</font><br />
<font SIZE="6">$time_2</font><br />
<font SIZE="6">$time_3</font><br />
<font SIZE="6">$time_4</font><br />
<font SIZE="6">$time_5</font><br />
<br />
<hr />
<解説><br />
Perlを利用した カウントダウンスクリプトを作成してみました。<br />
予定日が近づく毎にカウントダウンされていきます。<br />
予定日を過ぎるとカウントを終了しましたとメッセージを表示します。<br />
<br />
作成者HP<br />
<a href="$url" target="_blank">ORBIT SPACE</a>
</body>
</html>
EOD
;
#===========================
#誤差修正 サブルーチン 月用
#===========================
sub minus_MM {
if ($MM == "-1"){
$MM = "13";
}elsif ($MM == "-2"){
$MM = "14";
}elsif ($MM == "-3"){
$MM = "15";
}elsif ($MM == "-4"){
$MM = "16";
}elsif ($MM == "-5"){
$MM = "17";
}elsif ($MM == "-6"){
$MM = "18";
}elsif ($MM == "-8"){
$MM = "19";
}elsif ($MM == "-9"){
$MM = "20";
}elsif ($MM == "-10"){
$MM = "21";
}elsif ($MM == "-11"){
$MM = "22";
}elsif ($MM == "-12"){
$MM = "23";
}
}
#===============================
#誤差修正 サブルーチン 日にち用
#===============================
sub minus_DD {
if ($MM == "1"){
$MM = "12";
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "2"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "3"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "4"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "5"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "6"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "7"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "8"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "9"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "10"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "11"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}elsif ($MM == "12"){
$MM--;
#カレンダー読み込みと照合
&mons;
$days += $DD;
$DD = $days;
}
}
#=================================
#カレンダー読み込みと照合
#=================================
sub mons{
if ($tomon == "1"){
$days = $days_1;
}elsif ($tomon == "2"){
$days = $days_2;
}elsif ($tomon == "3"){
$days = $days_3;
}elsif ($tomon == "4"){
$days = $days_4;
}elsif ($tomon == "5"){
$days = $days_5;
}elsif ($tomon == "6"){
$days = $days_6;
}elsif ($tomon == "7"){
$days = $days_7;
}elsif ($tomon == "8"){
$days = $days_8;
}elsif ($tomon == "9"){
$days = $days_9;
}elsif ($tomon == "10"){
$days = $days_10;
}elsif ($tomon == "11"){
$days = $days_11;
}elsif ($tomon == "12"){
$days = $days_12;
}
}
アップロード方法
属性(パーミッション)について
Linux系サーバーでは属性をきちんと設定しなければ動きません。
Windowsには属性という理念は存在しませんので
Win系サーバーでは考える必要は無いです。
CGIを実行出来るデレクトリーにアップロードしてください。
もしもError500になる場合は
管理者に
#!/usr/bin/perl
のパスを確認してもらってください。
自宅サーバー利用者について
CGIはApache2の場合
/etc/apache2/conf/httpd.conf
あたりを設定してみましょう。
図
public_html/ ←公開ディレクトリー
|
+-/cgi-bin/ ←属性:drwxr-xr-x
|
+-win.cgi ←属性:-rwxr-xr-x
最近のコメント