X-Git-Url: http://git.shiar.net/perl/plp/.git/blobdiff_plain/6fc33d2b5bd84a3bfb1c8d393cf57e1081fcd623..a4dab1e4ec41edfa4ba07128f9ee5ff97a53c3ee:/PLP/Apache.pm diff --git a/PLP/Apache.pm b/PLP/Apache.pm index 217546f..b174486 100644 --- a/PLP/Apache.pm +++ b/PLP/Apache.pm @@ -4,25 +4,45 @@ use strict; our $VERSION = '1.00'; +use PLP; + +use constant MP2 => ( + defined $ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} >= 2 +); + +BEGIN { + if (MP2) { + require Apache2::Const; + require Apache2::RequestRec; + require Apache2::RequestUtil; + require Apache2::RequestIO; + } else { + require Apache::Constants; + } +} + +our $r; + # mod_perl initializer: returns 0 on success, Apache error code on failure sub init { - our $r = shift; + $r = shift; $PLP::print = 'PLP::Apache::print'; + $PLP::read = \&read; $ENV{PLP_FILENAME} = my $filename = $r->filename; unless (-f $filename) { - return Apache::Constants::NOT_FOUND(); + return MP2 ? Apache2::Const::HTTP_NOT_FOUND() : Apache::Constants::NOT_FOUND(); } unless (-r _) { - return Apache::Constants::FORBIDDEN(); + return MP2 ? Apache2::Const::HTTP_FORBIDDEN() : Apache::Constants::FORBIDDEN(); } $ENV{PLP_NAME} = $r->uri; - our $use_cache = $r->dir_config('PLPcache') !~ /^off$/i; -#S our $use_safe = $r->dir_config('PLPsafe') =~ /^on$/i; + $PLP::use_cache = $r->dir_config('PLPcache') !~ /^off$/i; +#S $PLP::use_safe = $r->dir_config('PLPsafe') =~ /^on$/i; my $path = $r->filename(); my ($file, $dir) = File::Basename::fileparse($path); chdir $dir; @@ -32,12 +52,75 @@ sub init { return 0; # OK } +sub read ($) { + my ($bytes) = @_; + $r->read(my $data, $bytes); + return $data; +} + # FAST printing under mod_perl sub print { return unless grep length, @_; PLP::sendheaders() unless $PLP::sentheaders; - $PLP::Apache::r->print(@_); + $r->print(@_); +} + +# This is the mod_perl handler. +sub handler { + PLP::clean(); + if (my $ret = init($_[0])) { + return $ret; + } + #S PLP::start($_[0]); + PLP::start(); + no strict 'subs'; + return MP2 ? Apache2::Const::OK() : Apache::Constants::OK(); } 1; +=head1 NAME + +PLP::Apache - Apache mod_perl interface for PLP + +=head1 SYNOPSIS + +Naturally, you'll need to enable I: + + apache-modconf apache enable mod_perl + +Setup F (often just create a F) with: + + + + SetHandler perl-script + PerlHandler PLP::Apache + PerlSendHeader On + PerlSetVar PLPcache On + + + +=head1 DESCRIPTION + +=head2 PerlSetVar configuration directives + +=over 16 + +=item PLPcache + +Sets caching B/B. When caching, PLP saves your script in memory and +doesn't re-read and re-parse it if it hasn't changed. PLP will use more memory, +but will also run 50% faster. + +B is default, anything that isn't =~ /^off$/i is considered On. + +=back + +=head1 AUTHOR + +Mischa POSLAWSKY + +=head1 SEE ALSO + +L, L, L +