Changeset 23524

Show
Ignore:
Timestamp:
11/13/08 11:24:37 (5 years ago)
Author:
tokuhirom
Message:

最新版に差し替え

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/App-Benchmark-WAF/trunk/t/htdocs/cgi/menta-nocompile/lib/MENTA.pm

    r23515 r23524  
    2121 
    2222sub run_menta { 
     23    my $config = shift @_; 
     24 
     25    local $MENTA::CONFIG; 
     26    local $MENTA::REQ; 
     27    local $MENTA::FINISHED = 0; 
     28 
    2329    { 
    24         my $config = shift @_; 
    2530        $config->{menta}->{max_post_body} ||= MENTA::DEFAULT_MAX_POST_BODY; 
    2631        $MENTA::CONFIG = $config; 
     
    2833 
    2934    eval { 
    30         my $config = config(); 
    31         if (! $config) { 
    32             die "config() でアプリケーション設定がされていません!"; 
    33         } 
    34  
    35         my $input; 
    36         if ($ENV{'REQUEST_METHOD'} eq "POST") { 
    37             my $max_post_body = $config->{menta}->{max_post_body}; 
    38             if ($max_post_body > 0 && $ENV{CONTENT_LENGTH} > $max_post_body) { 
    39                 die "投稿データが長すぎです"; 
    40             } else { 
    41                 read(STDIN, $input, $ENV{'CONTENT_LENGTH'}); 
     35        my $path = $ENV{PATH_INFO} || '/'; 
     36        $path =~ s!^/+!!g; 
     37        if ($path =~ /^[a-z0-9_]*$/) { 
     38            my $mode = $path || 'index'; 
     39            my $meth = "do_$mode"; 
     40            if (my $code = main->can($meth)) { 
     41                $code->(); 
     42                unless ($MENTA::FINISHED) { 
     43                    die "なにも出力してません"; 
     44                } 
     45            } else { 
     46                die "「${mode}」というモードは存在しません"; 
     47            } 
     48        } elsif (-f $path) { 
     49            if (open my $fh, '<', $path) { 
     50                printf "Content-Type: %s\r\n\r\n", guess_mime_type($path); 
     51                print do { local $/; <$fh> }; 
     52                close $fh; 
     53                return 1; 
     54            } else { 
     55                die "ファイルが開きません"; 
    4256            } 
    4357        } else { 
    44             $input = $ENV{QUERY_STRING}; 
    45         } 
    46         local $MENTA::REQ = {}; 
    47         local $MENTA::FINISHED = 0; 
    48  
    49         for ( split /&/, $input) { 
    50             my ($key, $val) = split /=/, $_; 
    51             if ($val) { 
    52                 $val =~ tr/+/ /; 
    53                 $val =~ s/%([a-fA-F0-9]{2})/pack("H2", $1)/eg; 
    54             } 
    55             $MENTA::REQ->{$key} = $val; 
    56         } 
    57  
    58         if (my $static_file = $ENV{PATH_INFO}) { 
    59             $static_file =~ s!^/+!!g; 
    60             if ($static_file !~ /\bmenta\.cgi\b/ && -f $static_file) { 
    61                 if (open my $fh, '<', $static_file) { 
    62                     printf "Content-Type: %s\r\n\r\n", guess_mime_type($static_file); 
    63                     print do { local $/; <$fh> }; 
    64                     close $fh; 
    65                     return 1; 
    66                 } else { 
    67                     die "ファイルが開きません"; 
    68                 } 
    69             } 
    70         } 
    71  
    72         my $mode = $MENTA::REQ->{mode} || 'index'; 
    73         my $meth = "do_$mode"; 
    74         if (my $code = main->can($meth)) { 
    75             $code->($MENTA::REQ); 
    76             unless ($MENTA::FINISHED) { 
    77                 die "なにも出力してません"; 
    78             } 
    79         } else { 
    80             die "「${mode}」というモードは存在しません"; 
     58            die "$path を処理する方法がわかりません"; 
    8159        } 
    8260    }; 
     
    8967        print "\r\n"; 
    9068 
    91         my $config = config() || {}; 
    9269        my $body = do { 
    9370            if ($config->{menta}->{kcatch_mode}) { 
     
    155132        die $@ if $@; 
    156133        $out = $tmplcode->(@params); 
    157         write_file($cachefname, $src); 
     134        write_file($cachefname, "package main; use utf8;\n$src"); 
    158135    } 
    159136 
     
    188165sub read_file { 
    189166    my $fname = shift; 
    190     open my $fh, '<:utf8', $fname or die $!; 
     167    open my $fh, '<:utf8', $fname or die "${fname} を読み込みように開けません: $!"; 
    191168    my $s = do { local $/; join '', <$fh> }; 
    192169    close $fh; 
     
    196173sub write_file { 
    197174    my ($fname, $stuff) = @_; 
    198     open my $fh, '>:utf8', $fname or die $!; 
     175    open my $fh, '>:utf8', $fname or die "${fname} を書き込み用に開けません: $!"; 
    199176    print $fh $stuff; 
    200177    close $fh; 
    201178} 
    202179 
     180sub param { 
     181    my $key = shift; 
     182 
     183    unless (defined $MENTA::REQ) { 
     184        my $input; 
     185        if ($ENV{'REQUEST_METHOD'} eq "POST") { 
     186            my $max_post_body = config()->{menta}->{max_post_body}; 
     187            if ($max_post_body > 0 && $ENV{CONTENT_LENGTH} > $max_post_body) { 
     188                die "投稿データが長すぎです"; 
     189            } else { 
     190                read(STDIN, $input, $ENV{'CONTENT_LENGTH'}); 
     191            } 
     192        } else { 
     193            $input = $ENV{QUERY_STRING}; 
     194        } 
     195 
     196        for ( split /&/, $input) { 
     197            my ($key, $val) = split /=/, $_; 
     198            if ($val) { 
     199                $val =~ tr/+/ /; 
     200                $val =~ s/%([a-fA-F0-9]{2})/pack("H2", $1)/eg; 
     201            } 
     202            $MENTA::REQ->{$key} = $val; 
     203        } 
     204    } 
     205 
     206    return $MENTA::REQ->{$key}; 
     207} 
     208 
    2032091;