1 package PLP::Backend::Apache;
11 defined $ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} >= 2
16 require Apache2::Const;
17 require Apache2::RequestRec;
18 require Apache2::RequestUtil;
19 require Apache2::RequestIO;
21 Apache2::Const->import(-compile => qw(
22 HTTP_NOT_FOUND HTTP_FORBIDDEN OK
25 require Apache::Constants;
31 # mod_perl initializer: returns 0 on success, Apache error code on failure
35 $PLP::print = 'PLP::Backend::Apache::print';
37 *CORE::GLOBAL::warn = $SIG{__WARN__} = \&Apache2::ServerRec::warn if MP2;
39 $ENV{PLP_FILENAME} = my $filename = $r->filename;
41 unless (-f $filename) {
42 return MP2 ? Apache2::Const::HTTP_NOT_FOUND() : Apache::Constants::NOT_FOUND();
45 return MP2 ? Apache2::Const::HTTP_FORBIDDEN() : Apache::Constants::FORBIDDEN();
48 $ENV{PLP_NAME} = $r->uri;
50 $PLP::use_cache = ($r->dir_config('PLPcache') || 'on') !~ /^off$/i;
51 #S $PLP::use_safe = $r->dir_config('PLPsafe') =~ /^on$/i;
52 my $path = $r->filename();
53 my ($file, $dir) = File::Basename::fileparse($path);
56 $PLP::code = PLP::source($file, 0, undef, $path);
63 $r->read(my $data, $bytes);
67 # FAST printing under mod_perl
69 return unless grep length, @_;
70 PLP::sendheaders() unless $PLP::sentheaders;
74 # This is the mod_perl handler.
77 $PLP::interface = __PACKAGE__;
78 if (my $ret = init($_[0])) {
84 return MP2 ? Apache2::Const::OK() : Apache::Constants::OK();
91 PLP::Backend::Apache - Apache mod_perl interface for PLP
95 Naturally, you'll need to enable I<mod_perl>:
97 apache-modconf apache enable mod_perl
99 Setup F<httpd.conf> (in new installs just create F</etc/apache/conf.d/plp>) with:
101 <IfModule mod_perl.c>
103 SetHandler perl-script
104 PerlHandler PLP::Backend::Apache
111 =head2 Configuration directives
113 PLP behaviour can be configured by B<PerlSetVar> rules.
114 These can be added to a F<.htaccess> file or most any scope of server
115 configuration. For example, to disable caching for a specific site:
117 <Directory /var/www/somesite/>
118 PerlSetVar PLPcache Off
125 Sets caching B<On>/B<Off>.
126 When caching, PLP saves your script in memory and doesn't re-read
127 and re-parse it if it hasn't changed. PLP will use more memory,
128 but will also run 50% faster.
130 B<On> is default, anything that isn't =~ /^off$/i is considered On.
136 With mod_perlB<2>, any new request will change the cwd for all processes.
137 This means that if you're running files from multiple directories,
138 you I<should not use the current path> for it may change at any time.
140 The bug has been confirmed with at least mod_perl 2.0.2/3/4 on Apache 2.2.3/8.
141 Using this backend on Apache2 is extremely discouraged until this is fixed.
142 Instead, L<the FastCGI backend|PLP::Backend::FastCGI> is recommended.
144 Apache1 does not show any problems.
148 Mischa POSLAWSKY <perl@shiar.org>
152 L<PLP>, L<PLP::Backend::FastCGI>, L<mod_perl>