|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Chernomyrdin 2:5020/400 27 Aug 2002 00:05:09 To : All Subject : about mod_perl -------------------------------------------------------------------------------- Have a nice day! Вот уже который день читаю: http://perl.apache.org/ man mod_perl man Apache::* Hо никак не могу понять как правильно написать конфигурацию для apache... Сам скрипт написан на CGI и использует template toolkit. Используется virtual server и все параметры для mod_perl задаются через .htaccess # .htacess PerlModule Apache::PerlRun PerlModule CGI PerlModule CGI::Carp PerlModule Template PerlModule Compress::Zlib PerlHandler Apache::PerlRun # PerlHandler Apache::Registry # PerlHandler index PerlSendHeader on allow from all Options ExecCGI # Собственно index.cgi: #!/usr/bin/perl -w -- package index; use strict; use lib qw(. lib); use Apache::Constants qw(:common); use CGI qw(-oldstyle_urls -nosticky -no_xhtml); use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use Template; use Compress::Zlib; use Site; # это мой модуль. my %Template = ( 1 => { start => 'index.html', }, 3 => { start => 'not_yet.html', }, 4 => { start => 'links.html', }, 6 => { start => 'exchange.html', }, ); my $Charset = 'windows-1251'; &main; sub main { my $site = Site->new( -base => '.', -index => 'index.cgi', -opt => { menuwidth => 140, mailto => 'mailto:mailto@site.ru', charset => $Charset, }, ); my $t = Template->new( INCLUDE_PATH => 'templ', # or list ref POST_CHOMP => 1, # cleanup whitespace EVAL_PERL => 1, # evaluate Perl code blocks VARIABLES => {}, # PRE_PROCESS => 'header', # prefix each template # INTERPOLATE => 1, # expand "$var" in plain text ); my ( $id, $rc, $content, $q ); # Begin request processing... $q = CGI->new; $pid = int( $q->param( 'id' ) || 0 ) || 1; $pid = 1 if( not exists $Template{$id} ); $q->param( pid => $id ); $site->cgi( $q ); # set CGI object $content= ''; $rc = $t->process( $Template{$id}->{start}, { id => $id, site => $site }, sub { $content .= $_[0] } ); unless( $rc ) { $content = join( '', $q->header, $q->start_html( -title => 'Template error' ), $q->p( 'Template ', $Template{$pid}->{start}, ' process failed, error: ', $t->error() ), $q->end_html ); } if( length $content ) { my %header; # my $acc_enc = $q->http( 'Accept-encoding' ) || ''; $content .= "\n"; # if( $acc_enc =~ /(x-gzip|gzip)/ ) { # $header{-Content_Encoding} = $1; # $content = Compress::Zlib::memGzip( $content ); # } print $q->header( -type => "text/html; charset=$Charset", -charset => $Charset, -Content_Length => length( $content ), %header ), $content; } # end request processing } # for mod_perl sub handler { my $r = shift; $r->send_http_header('text/plain'); print "mod_perl handler is OK\n"; return OK; } 1; Что-бы хотелось: Что-бы все модули используемые загружались только один раз, что-бы объекты $site и $t не создавались каждый раз, а только при первой загрузке и $q получался с параметрами текущего запроса. Изначально все это писалось под FastCGI, но на другом хостинге FastCGI нету а есть mod_perl ну и соответственно все приходится перекраивать. -- With Best, Andrey <andrey@excom.spb.su> --- ifmail v.2.15dev5 * Origin: X-Com Online (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/642661dc408b.html, оценка из 5, голосов 10
|