stas 2002/06/19 12:25:02 Modified: src/docs/2.0/user/config config.pod Log: moving on with config docs Revision Changes Path 1.17 +197 -58 modperl-docs/src/docs/2.0/user/config/config.pod Index: config.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/config.pod,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- config.pod 15 Jun 2002 18:25:58 -0000 1.16 +++ config.pod 19 Jun 2002 19:25:02 -0000 1.17 @@ -41,11 +41,93 @@ If mod_perl has been statically linked it's automatically enabled. +Win32 users need to make sure that the path to the Perl binary (e.g., +I<C:\Perl\bin>) is in the C<PATH> environment variable. +=head1 Accessing the mod_perl 2.0 Modules + +In order to prevent from inadvertently loading mod_perl 1.0 modules +mod_perl 2.0 Perl modules are installed into dedicated directories +under I<Apache2/>. The C<Apache2> module prepends the locations of the +mod_perl 2.0 libraries to C<@INC>, which are the same as the core +C<@INC>, but with I<Apache2/> appended. This module has to be loaded +just after mod_perl has been enabled. This can be accomplished with: + + use Apache2 (); + +in the startup file. Only if you don't use a startup file you can add: + + PerlModule Apache2 + +to I<httpd.conf>, due to the order the C<PerlRequire> and +C<PerlModule> directives are processed. + + + + + + +=head1 Startup File + +Next usually a startup file with Perl code is loaded: + + PerlRequire "/home/httpd/httpd-2.0/perl/startup.pl" + +It's used to adjust Perl modules search paths in C<@INC>, pre-load +commonly used modules, pre-compile constants, etc. Here is a typical +I<startup.pl> for mod_perl 2.0: + + file:startup.pl + --------------- + use Apache2 (); + + use lib qw(/home/httpd/perl); + + # enable if the mod_perl 1.0 compatibility is needed + # use Apache::compat (); + + use ModPerl::Util (); #for CORE::GLOBAL::exit + + use Apache::RequestRec (); + use Apache::RequestIO (); + use Apache::RequestUtil (); + + use Apache::Server (); + use Apache::ServerUtil (); + use Apache::Connection (); + use Apache::Log (); + + use APR::Table (); + + use ModPerl::Registry (); + + use Apache::Const -compile => ':common'; + use APR::Const -compile => ':common'; + + 1; + +In this file the C<Apache2> modules is loaded, so the 2.0 modules will +be found. Afterwards C<@INC> in adjusted to include non-standard +directories with Perl modules: + + use lib qw(/home/httpd/perl); + +If you need to use the backwards compatibility layer load: + + use Apache::compat (); + +Next we preload the commanly used mod_perl 2.0 modules and precompile +common constants. + +Finally as usual the I<startup.pl> file must be terminated with C<1;>. + + + + =head1 Perl's Command Line Switches @@ -71,10 +153,121 @@ +=head1 mod_perl 2.0 Handlers + +mod_perl 2.0 provides two types of handlers: C<modperl> and +C<perl-script>. + +=head2 modperl + +Configured as: + + SetHandler modperl + +The bare mod_perl handler type, which just calls the C<Perl*Handler>'s +callback function. If you don't need the features provided by the +I<perl-script> handler, with the C<modperl> handler, you can gain even +more performance. (This handler isn't available in mod_perl 1.0.) + +Unless the C<Perl*Handler> callback running under the C<modperl> +handler is configured with: + + PerlOptions +SetupEnv + +or calls: + + $r->subprocess_env; + +in a void context (which has the same effect as C<PerlOptions ++SetupEnv> for the handler that called it), only the following +environment variables are accessible via C<%ENV>: + +=over + +=item * + +C<MOD_PERL> and C<GATEWAY_INTERFACE> (always) + +=item * + +C<PATH> and C<TZ> (if you had them defined in the shell or +I<httpd.conf>) + +=back + +Therefore if you don't want to add the overhead of populating C<%ENV>, +when you simply want to pass some configuration variables from +I<httpd.conf>, consider using C<PerlSetVar> and C<PerlAddVar> instead +of C<PerlSetEnv> and C<PerlPassEnv>. In your code you can retrieve the +values using the C<dir_config()> method. For example if you set in +I<httpd.conf>: + + <Location /print_env2> + SetHandler modperl + PerlResponseHandler Apache::VarTest + PerlSetVar VarTest VarTestValue + </Location> +this value can be retrieved inside C<Apache::VarTest::handler()> with: + $r->dir_config('VarTest'); -=head1 PerlOptions Directive +Alternatively use the Apache core directives C<SetEnv> and C<PassEnv>, +which always populate C<r->suprocess_env>, but this doesn't happen +until the Apache fixup phase, which could be too late for your needs. + +=head2 perl-script + +Configured as: + + SetHandler perl-script + +Most mod_perl handlers use the I<perl-script> handler. Among other +things it does: + +=over + +=item * + +C<PerlOptions +GlobalRequest> is in effect unless: + + PerlOptions -GlobalRequest + +is specified. + +=item * + +C<PerlOptions +SetupEnv> is in effect unless: + + PerlOption -SetupEnv + +is specified. + +=item * + +C<STDOUT> and C<STDOUT> get tied to the request object C<$r>, which +makes possible to read from C<STDIN> and print directly to C<STDOUT> +via C<CORE::print()>, instead of implicit calls like +C<$r-E<gt>puts()>. + +=item * + +Several special global Perl variables are saved before the handler is +called and restored afterwards (similar to mod_perl 1.0). This +includes: C<%ENV>, C<@INC>, C<$/>, C<STDOUT>'s C<$|> and C<END> blocks +array (C<PL_endav>). + +=back + + + + + + + + + +=head1 C<PerlOptions> Directive The directive C<PerlOptions> provides fine-grained configuration for what were compile-time only options in the first mod_perl generation. @@ -132,6 +325,8 @@ one for each C<E<lt>VirtualHostE<gt>>, each with its own namespace and pointing to a different paths in C<@INC>: +META: is -Mblib portable? (problems with -Mlib on Darwin/5.6.0?) + <VirtualHost ...> ServerName dev1 PerlOptions +Parent @@ -351,64 +546,8 @@ =head1 Handlers Directives -META: need to add descriptions - -=head2 PerlChildInitHandler - -=head2 PerlOpenLogsHandler - -=head2 PerlPostConfigHandler - -=head2 PerlPreConnectionHandler - -=head2 PerlProcessConnectionHandler - -=head2 PerlHeaderParserHandler - -=head2 PerlAccessHandler - -=head2 PerlAuthenHandler - -=head2 PerlAuthzHandler - -=head2 PerlTypeHandler - -=head2 PerlFixupHandler - -=head2 PerlResponseHandler - -=head2 PerlLogHandler - -=head2 PerlPostReadRequestHandler - -=head2 PerlInitHandler - -=head2 PerlTransHandler - -=head2 PerlOutputFilterHandler - -The mod_perl 2.0 interface to the Apache filtering API is much simpler -than the C API, hiding most of the details underneath. Perl filters -are configured using the C<PerlOutputFilterHandler> directive. For -example: - - PerlOutputFilterHandler Apache::ReverseFilter - -This simply registers the filter, which can then be turned on using -the core C<AddOutputFilter> directive: - - <Location /filterme> - AddOutputFilter Apache::ReverseFilter - </Location> - -The C<Apache::ReverseFilter> handler will now be called for anything -accessed in the I</filterme> URL space. The C<AddOutputFilter> -directive takes any number of filters. For example, the configuration: - - AddOutputFilter INCLUDE Apache::ReverseFilter +See L<The handlers chapter|docs::2.0::user::handlers::handler>. -will first send the output to I<mod_include>, which will in turn pass -its output down to C<Apache::ReverseFilter>.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]