こんにちわ,
Penelottyです♪
スクリプトを動かして,どうにか喜びを感じられる程度に辿り着きました.
主にCGIを作っているのですが,そのPeneにどうしても破られない壁があります,
それはクッキーです.
以前にも相談にのっていただいたのですが,まだ解決できていません.
そこで掟破りになるのかもしれませんが,スクリプトを掲載しますので,ぜひ添削を願いないのですが….
スクリプトの意図するところは,ブラウザにメッセージをだすことです,
でも一度アクセスするとその日は同じメッセージをだすようにしたいのですが.
コーディング上は問題ないはずだと思います.
ぜひご助力願います.
---* Penelotty *---
#!/usr/local/bin/perl
#
$jcodelib='jcode.pl';
#
$kanjicode='sjis';
#
$modifier='chirumiru';
#
$htmlfile='default.html';
#
$omikujifile='otsuge.txt';
#
$changetag='<otsuge>';
#
$delimiter='----';
#
$COOKIENAME='OTSUGE';
#
require "$jcodelib";
&get_cookie;
$today=&get_today;
open(OMIKUJI, "$omikujifile");
@omikuji=<OMIKUJI>;
close(OMIKUJI);
$title=shift(@omikuji);
chomp($title);
$str=join('', @omikuji);
@otsuge=split(/$delimiter/, $str);
if ($today ne $c_date) {
srand(time | $$);
$index=int(rand(@otsuge));
}
else {
$index=$c_index;
}
$change="<center><b><u><font size=4 color=#8025da face=DFPPOP体>$title</font></u></b></center><center><b><font size=4 color=#8025da>↓</font></b></center><center><b><font color=#ffffec size=3>$otsuge[$index]</font></b></center>";
print "Content-type: text/html\n";
open(OUT, "$htmlfile");
@html=<OUT>;
foreach (@html) {
s/$changetag/$change/gi;
print $_;
}
close(OUT);
&set_cookie;
print "\n";
sub get_cookie {
@pairs=$ENV{'HTTP_COOKIE'};
foreach $pair (@pairs) {
($name, $value)=split(/=/, $pairs);
$DUMMY{$name}=$value;
}
$pairs=$DUMMY{'otsuge'};
foreach $pair (@pairs) {
($name, $value)=split(/,/, $pair);
$COOKIE{$name}=$value;
}
$c_date=$COOKIE{'date'};
$c_index=$COOKIE{'index'};
}
sub set_cookie {
($sec, $min, $hour, $day, $mon, $year, $week)=gmtime(time+365*24*60*60);
if ($sec<10) { $sec="0$sec"; }
if ($min<10) { $min="0$min"; }
if ($hour<10) { $hour="0$hour"; }
if ($day<10) { $day="0$day"; }
$year+=1900;
$month=('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Oct', 'Nov', 'Dec')[$mon];
$weeky=('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')[$week];
$date_gmt="$weeky, $day-$month-$year $hour:$min:$sec GMT";
$cook="date:$today,index:$index";
print "Set-Cookie: $COOKIENAME=$cook; expires=$date_gmt\n"
}
sub get_today {
($sec, $min, $hour, $day, $mon, $year)=localtime(time);
$year+=1900;
$mon++;
return "$year-$mon-$day";
}