<%@ Language='PerlScript' %><% my($CDIR) = $Server->MapPath('.'); require $CDIR.'\\.config'; use Time::Local; # for timelocal my(@CACHE, @KEY_LIST); my($UA) = $Request->ServerVariables('HTTP_USER-AGENT')->{Item}; my($MYSELF) = $Request->ServerVariables('URL')->{Item}; my($THUMB) = $Request->QueryString('thumb')->{Item}; my($PAGE) = $Request->QueryString('page')->{Item}; my($KEY) = $Request->QueryString('key')->{Item}; my($query) = $Request->QueryString('q')->{Item}; my($Ktai) = ($UA =~ /^DoCoMo/); $MYSELF =~ s!^.*/!!; $THUMB = $Ktai? 0 : $DEFAULT_THUMB if $THUMB eq ''; #$PAGE = 1 if $PAGE < 1; foreach (split(/[, ]/, $query)) { my($eq) = encrypt($_); $KEY .= ($KEY eq ''? '' : ',').$eq if index(",$KEY,", $eq) == -1; } my($thumb) = ($THUMB == $DEFAULT_THUMB)? '' : 'thumb='.$THUMB.'&'; my($key) = ($KEY eq '')? '' : 'key='.$KEY.'&'; my($page) = ($PAGE eq '')? '' : 'page='.$PAGE; my($cookie); if ($query ne '') { my($link) = "$MYSELF?${thumb}${key}${page}"; $link =~ s/[?&]*$//g; $Response->Redirect($link); $Response->End(); exit; } # pre-processing DeleteTempFile(); ReadCache(); # count total pages my($MAX_PAGE) = int($#CACHE/$SHOTS_A_PAGE)+1; $PAGE = $DEFAULT_LAST? $MAX_PAGE : 1 if $PAGE eq ''; $page = 'page='.$PAGE; # for title my($thumb_link); if ($Ktai) { $TEXT_POST_PAGE = ''; } else { my($inv_thumb) = ($THUMB == $DEFAULT_THUMB)? 'thumb='.($THUMB==0? 1 : 0).'&' : ''; $thumb_link = $MYSELF.'?'.$inv_thumb.$key.$page; $thumb_link =~ s/[?&]*$//g; $thumb_link =~ s/&/&/g; $thumb_link = " (".($THUMB == 0? $TEXT_THUMB : $TEXT_LIST).')'; $TEXT_POST_PAGE = '' if $PASSWORD ne '' && index(",$KEY,", encrypt($PASSWORD)) == -1; $TEXT_POST_PAGE =~ s/$PAGE_POST/$&?key=$KEY/ if $KEY ne ''; } if ($AVOID_IMGLINK) { my($ip) = $Request->ServerVariables('REMOTE_ADDR')->{Item}; my($key) = sprintf('%X', unpack('N', pack('c*', split('\.', $ip))) >> 8); $cookie = encrypt($key).'='.time.'&'; $Response->Cookies(encrypt($key))->{Item} = time; } my($EnumCache) = EnumCache(); my($EnumKeyword) = EnumKeyword(); my($HTML) = < $TITLE ($PAGE/$MAX_PAGE)

$TITLE $thumb_link


$EnumCache

$TEXT_POST_PAGE
$EnumKeyword $TEXT_PRIKEYWORD$TEXT_SEP
HTML_EOM if ($Ktai) { $HTML =~ s!$TEXT_SEP!
!g; $HTML =~ s!!
!ig; $HTML =~ s!(
)?!!i; $HTML =~ s!!!igs; $HTML =~ s!<(style|script).*?!!igs; $HTML =~ s/<(meta|!).*?>//igs; $HTML =~ s/\s+(lang|style|onclick)=('|").*?\2//igs; $HTML =~ s!( )*\d+/[0-9 /:]+!!ig; $HTML =~ s/( )+\s*/$1/igs; $HTML =~ s/>\s*/>\n/gs; } $Response->{ContentType} = 'text/html; charset=shift_jis'; $Response->Write($HTML); return; #----------------------------------------------------------------------------- # 0: (temporal) title name # 1: local path name / extend name # 2: mime type # 3: shot date/time # 4: width # 5: height # 6: file size # 7: post date/time # 8: don't delete flag # 9: comment # 10: keyword # 11: public or private flag # sub ReadCache { my(%KEY_LIST); open(CACHE, $CDIR.$IMAGE_DIR.'cache.log'); while () { chomp; my(@data) = split(/,/, $_); next if $data[0] =~ /^id/; push @KEY_LIST, $data[10] if $data[11] == 1 && !defined $KEY_LIST{$data[10]}; $KEY_LIST{$data[10]} = $data[11]; next if $data[10] ne '' && index($KEY, encrypt($data[10])) == -1; push @CACHE, $_; $CACHE{$data[0]} = $#CACHE; } close(CACHE); } #----------------------------------------------------------------------------- sub EnumCache { my($link, $ret); if ($SHOTS_A_PAGE <= $#CACHE) { $link = "\r\n\t\r\n"; $link .= "\t\t\r\n"; $link .= "\t\t\r\n"; $link .= "\t\t\r\n"; $link .= "\t\r\n
"; $link .= ($PAGE > 1)? "<< $TEXT_PREV_PAGE" : "<< $TEXT_PREV_PAGE"; $link .= "      \r\n"; for (my $i = 1; $i <= $MAX_PAGE; $i++) { $link .= "\t\t\t"; $link .= ($i == $PAGE)? "$i" : "$i"; $link .= "\r\n"; } $link .= "\t\t      "; $link .= ($PAGE < $MAX_PAGE)? "$TEXT_NEXT_PAGE >>" : "$TEXT_NEXT_PAGE >>"; $link .= "
\r\n"; } for (my $i = 0; $i < $SHOTS_A_PAGE; $i++) { my(@data) = split(',', $CACHE[$SHOTS_A_PAGE*($PAGE-1)+$i]); last if $#data == -1; my($link) = "$PAGE_IMAGE?${key}${cookie}id=".$Server->URLEncode($data[0]); $link =~ s/&/&/; if ($THUMB == 0) { my($fsize) = $data[6] < 1024*1024? sprintf('%6.1f KB', $data[6]/1024) : sprintf('%6.1f MB', $data[6]/1024/1024); my(@tm) = localtime($data[7]); my($date) = sprintf('%04d/%2d/%2d %02d:%02d', 1900+$tm[5], 1+$tm[4], $tm[3], $tm[2], $tm[1]); $ret .= "\t\r\n\t\t$data[0]\ \r\n\t\t $data[9] \r\n\t\t $data[4]x$data[5]\ \r\n\t\t $fsize\ \r\n\t\t $date\r\n\t\r\n"; } else { my($size, $height); if ($data[4] > 0 && ($height = $data[5]*120/$data[4]) > 120) { $size = 'width=\''.$data[4]*120/$data[5].'\' ' if $data[5] > 0; $size .= 'height=\'120\''; } else { $size = 'width=\'120\''; $size .= ' height=\''.$height.'\'' if $height ne ''; } #$ret .= "\t\r\n\t\t$data[9]\r\n\t\r\n"; $ret .= "\t$data[9]\r\n"; } } if ($ret ne '') { if ($THUMB == 0) { $ret = "\r\n\t$TEXT_TABLETITLE\r\n$ret
"; } else { #$ret = "
\r\n".$ret.'

'; $ret .= '
'; } } return "${link}
\r\n${ret}
\r\n${link}"; } #----------------------------------------------------------------------------- sub EnumKeyword { my($list); foreach $k (reverse @KEY_LIST) { $list .= "\t $k,\r\n"; } $list =~ s/,\r\n$/
\r\n/; return ($list ne '')? "\t $TEXT_PUBKEYLIST$TEXT_SEP\r\n$list" : ''; } #----------------------------------------------------------------------------- sub DeleteTempFile { my(@CACHE) = (); my($update) = 0; my($size) = 0; foreach (glob($CDIR.$IMAGE_DIR.$CGITMP.'*')) { unlink($_) if time-(stat($_))[9] > 3600; } open(CACHE, $CDIR.$IMAGE_DIR.'cache.log'); while () { chomp; my(@data) = split(',', $_); if ($data[0] =~ /^id(.*)/ && !-e $CDIR.$IMAGE_DIR.$CGITMP.$1) { $update = 1; next; } if ($data[6] eq '' || $data[6] == 0) { $data[6] = -s $CDIR.$IMAGE_DIR.$data[0].$data[1]; $update = 1; } if ($data[3] ne '' && $data[7] eq '') { my(@d) = split(/[\/: ]/, $data[3]); $data[7] = timelocal($d[5], $d[4], $d[3], $d[2], $d[1]-1, ($d[0]>1900? $d[0]-1900:$d[0])); $update = 1; } if ($data[7] eq '' || $data[7] == 0) { $data[7] = (stat($CDIR.$IMAGE_DIR.$data[0].$data[1]))[9]; $update = 1; } push @CACHE, join(',', @data); $size += $data[6] if $data[8] == 0; if ($MAX_SHOTS_SIZE > 0 && $size > $MAX_SHOTS_SIZE) { for (my $i=0; $size > $MAX_SHOTS_SIZE && $i<$#CACHE; $i++) { my(@d) = split(',', $CACHE[$i]); next if $data[8] == 1; $size -= $data[6]; $CACHE[$i] = 'del'; } $update = 1; } } close(CACHE); if ($update) { `copy $CDIR.$IMAGE_DIR.\\cache.log $CDIR.$IMAGE_DIR.\\cache.log.bak`; open(CACHE, '>'.$CDIR.$IMAGE_DIR.'cache.log'); foreach (@CACHE) { next if /^del$/; print CACHE "$_\n" if !/^id/; } close(CACHE); } } ################################################################################# ################################################################################# ################################################################################# ################################################################################# ################################################################################# %>