■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50

【スレッド】2ch型掲示板 14 【フロート型】

615 :nobodyさん :2006/09/28(木) 08:35:21 ID:???
#!/usr/bin/perl -w

use strict;
use POSIX qw(strftime);
use File::stat;
use Time::Local qw(timegm);

if ($#ARGV != 1 || $ARGV[0] =~ /\W/ || $ARGV[1] =~ /\D/) {
    print <<EOT;
Status: 400 Bad Request
Content-Type: text/plain

400 Bad Request
EOT
    exit;
}

my $fname = "../$ARGV[0]/dat/$ARGV[1].dat";
my $st;
if (!($st = stat($fname))) {
    print <<EOT;
Status: 404 Not Found
Content-Type: text/plain

404 Not Found
EOT
    exit;
}

616 :nobodyさん :2006/09/28(木) 08:36:06 ID:???
my $ims = !$ENV{HTTP_IF_MODIFIED_SINCE}
          ? 0
          : $ENV{HTTP_IF_MODIFIED_SINCE} =~ /^\w{3,}, {1,2}(\d{1,2})[ -](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[ -](\d{2,4}) {1,2}(\d{1,2}):(\d{2}):(\d{2}) GMT$/
            ? timegm($6, $5, $4, $1, index('JanFebMarAprMayJunJulAugSepOctNovDec', $2) / 3, $3)
            : $ENV{HTTP_IF_MODIFIED_SINCE} =~ /^\w{3} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) {1,2}(\d{1,2}) {1,2}(\d{1,2}):(\d{2}):(\d{2}) (\d{4})$/
              ? timegm($5, $4, $3, $2, index('JanFebMarAprMayJunJulAugSepOctNovDec', $1) / 3, $6)
              : 0;
if ($ims ge $st->mtime) {
    print "Status: 304 Not Modified\n\n";
    exit;
}
my $mtime = strftime('%a, %d %b %Y %T GMT', gmtime($st->mtime));

print <<EOT;
Content-Type: application/xml; charset=Shift_JIS
Last-Modified: $mtime
Cache-Control: max-age=5

<?xml version="1.0" encoding="Shift_JIS"?>
<text><![CDATA[
EOT
if (open(DAT, $fname)) {
    while (<DAT>) {
        print;
    }
    close(DAT);
}
print "]]></text>\n";

617 :nobodyさん :2006/09/28(木) 08:39:03 ID:???
>>615-616 のように dat の内容を XML の CDATA セクションに入れて渡せばおk

618 :nobodyさん :2006/09/28(木) 09:35:48 ID:???
>>616 ちとミス

-if ($ims ge $st->mtime) {
+if ($ims >= $st->mtime) {

で、使い方は、例えば /test/dat.cgi として置いた場合 /test/dat.cgi?php+1127896640 のように呼ぶ。

226KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30