X-Git-Url: http://git.shiar.net/perl/plp/.git/blobdiff_plain/511bec51e1166380e4b1af5665f1e41e220ae131..a3a4d694959ff6549ab0a37632440f529229c576:/PLP.pm diff --git a/PLP.pm b/PLP.pm index 8e6d188..8a535da 100644 --- a/PLP.pm +++ b/PLP.pm @@ -17,13 +17,10 @@ our $VERSION = '3.19'; # Subs in this package: # _default_error($plain, $html) Default error handler -# cgi_init Initialization for CGI # clean Reset variables # error($error, $type) Handle errors # everything Do everything: CGI # handler($r) Do everything: mod_perl -# mod_perl_init($r) Initialization for mod_perl -# mod_perl_print Faster printing for mod_perl # sendheaders Send headers # source($path, $level, $linespec) Read and parse .plp files # start Start the initialized PLP script @@ -40,44 +37,6 @@ sub _default_error { qq{Debug information:
$html}; } -# CGI initializer: parses PATH_TRANSLATED -sub cgi_init { - - $PLP::print = 'print'; - - my $path = $ENV{PATH_TRANSLATED}; - $ENV{PLP_NAME} = $ENV{PATH_INFO}; - my $path_info; - while (not -f $path) { - if (not $path =~ s/(\/+[^\/]*)$//) { - print STDERR "PLP: Not found: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n"; - PLP::error(undef, 404); - exit; - } - my $pi = $1; - $ENV{PLP_NAME} =~ s/\Q$pi\E$//; - $path_info = $pi . $path_info; - } - - if (not -r $path) { - print STDERR "PLP: Can't read: $ENV{PATH_TRANSLATED} ($ENV{REQUEST_URI})\n"; - PLP::error(undef, 403); - exit; - } - - delete @ENV{ - qw(PATH_TRANSLATED SCRIPT_NAME SCRIPT_FILENAME PATH_INFO), - grep /^REDIRECT_/, keys %ENV - }; - - $ENV{PATH_INFO} = $path_info if defined $path_info; - $ENV{PLP_FILENAME} = $path; - my ($file, $dir) = File::Basename::fileparse($path); - chdir $dir; - - $PLP::code = PLP::source($file, 0, undef, $path); -} - # This cleans up from previous requests, and sets the default $PLP::DEBUG sub clean { @PLP::END = (); @@ -85,7 +44,6 @@ sub clean { $PLP::sentheaders = 0; $PLP::DEBUG = 1; $PLP::print = ''; - $PLP::r = undef; delete @ENV{ grep /^PLP_/, keys %ENV }; } @@ -121,59 +79,14 @@ sub error { } } -# This is run by the CGI script. (#!perl \n use PLP; PLP::everything;) +# Wrap old request handlers. sub everything { - clean(); - cgi_init(); - start(); + require PLP::Backend::CGI; + PLP::Backend::CGI::everything(); } - -# This is the mod_perl handler. sub handler { - require Apache::Constants; - clean(); - if (my $ret = mod_perl_init($_[0])) { - return $ret; - } - #S start($_[0]); - start(); - no strict 'subs'; - return Apache::Constants::OK(); -} - -# mod_perl initializer: returns 0 on success, Apache error code on failure -sub mod_perl_init { - our $r = shift; - - $PLP::print = 'PLP::mod_perl_print'; - - $ENV{PLP_FILENAME} = my $filename = $r->filename; - - unless (-f $filename) { - return Apache::Constants::NOT_FOUND(); - } - unless (-r _) { - return 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; - my $path = $r->filename(); - my ($file, $dir) = File::Basename::fileparse($path); - chdir $dir; - - $PLP::code = PLP::source($file, 0, undef, $path); - - return 0; # OK -} - -# FAST printing under mod_perl -sub mod_perl_print { - return unless grep length, @_; - PLP::sendheaders() unless $PLP::sentheaders; - $PLP::r->print(@_); + require PLP::Backend::Apache; + PLP::Backend::Apache::handler(@_); } # Sends the headers waiting in %PLP::Script::header @@ -343,47 +256,30 @@ PLP - Perl in HTML pages =head1 SYNOPSIS -=head2 mod_perl installation +=head2 Lighttpd installation -=over 10 +F configuration using L: + + server.modules = ( + "mod_fastcgi", + ) + fastcgi.server = ( + ".plp" => (( + "bin-path" => "/usr/bin/perl -MPLP::Backend::FastCGI", + "socket" => "/tmp/fcgi-plp.socket", + )), + ) + +=head2 Apache installation -=item * httpd.conf (for mod_perl setup) +F for a L setup: SetHandler perl-script - PerlHandler PLP + PerlHandler PLP::Backend::Apache PerlSendHeader On - PerlSetVar PLPcache On - # Who said CGI was easier to set up? :) - -=back - -=head2 CGI installation - -=over 10 - -=item * /foo/bar/plp.cgi (local filesystem address) - - #!/usr/bin/perl - use PLP; - PLP::everything(); - -=item * httpd.conf (for CGI setup) - - ScriptAlias /foo/bar/ /PLP_COMMON/ - - AllowOverride None - Options +ExecCGI - Order allow,deny - Allow from all - - AddHandler plp-document plp - Action plp-document /PLP_COMMON/plp.cgi - -=back - =head2 Test script (test.plp) @@ -396,8 +292,33 @@ PLP - Perl in HTML pages PLP is yet another Perl embedder, primarily for HTML documents. Unlike with other Perl embedders, there is no need to learn a meta-syntax or object -model: one can just use the normal Perl constructs. PLP runs under mod_perl -for speeds comparable to those of PHP, but can also be run as a CGI script. +model: one can just use the normal Perl constructs. PLP runs under +L and L +for speeds comparable to those of PHP, but can also be run as a standard +L script. + +=head2 Setup + +See either +L, +L (recommended) +or L. +At least the following servers are supported: + +=over 10 + +=item Lighttpd + +With L or L. + +=item Apache + +Either version 1 or 2. Using +L, +L, +or L. + +=back =head2 PLP Syntax @@ -477,20 +398,6 @@ These are described in L. =back -=head2 (mod_perl only) PerlSetVar configuration directives - -=over 22 - -=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 - =head2 Things that you should know about Not only syntax is important, you should also be aware of some other important