NAME
   Apache::Fake - fake a mod_perl request object

VERSION
   This document refers to version 0.10 of Apache::Fake, released February
   1, 2002.

SYNOPSIS
   Case 1: Using a CGI script as Apache SetHandler

   /cgi-bin/nph-modperl-emu.cgi:

       #!/usr/bin/perl
       use lib '/some/private/lib_path';
       use Apache::Fake;
       new Apache::Fake('httpd_conf' => '/some/private/httpd.conf',
           'dir_conf' => '.htaccess.emu');

   In your httpd.conf or .htaccess, add something like this:

       Action modperl-emu /cgi-bin/nph-modperl-emu.cgi
       SetHandler modperl-emu

   Access page just like under mod_perl. (http://host/real/page/here.html)

   Case 2: Exclusively using PATH_INFO

   /cgi-bin/nph-modperl-emu.cgi:

           #!/usr/bin/perl
           use lib '/some/private/lib_path';
           use Apache::Fake;

           new Apache::Fake('httpd_conf' => '/some/private/httpd.conf',
                   'dir_conf' => '.htaccess.emu',
                   'handler_cgi' => '/cgi-bin/nph-modperl-emu.cgi',
                   'virtual_root' => '/some/private/document_root');

   Access page like:
   http://host/cgi-bin/nph-modperl-emu.cgi/real/page/here.html

DESCRIPTION
   This module fakes a mod_perl request object using the Common Gateway
   Interface. Everything that works with mod_perl should work with
   Apache::Fake as well. Apache::Fake parses apache-style config files for
   any relevant settings. A working mod_perl configuration should work
   without any modifications given all relevant config files are found. If
   not, you've found a bug.

   Apache::Fake currently emulates the following modules: Apache,
   Apache::Request, Apache::Table, Apache::Log, mod_perl. Re-use-ing these
   modules will do no harm, since Apache::Fake sets %INC for these modules.

   For documentation, refer to the mod_perl documentation.

   Things planned, but not yet working, are: Subrequests, other handlers
   than PerlHandler, internal_redirect, custom_response, $r->handler().

   Things that never will work are: $->get_basic_auth_pw,
   $r->note_basic_auth_failure.

CONSTRUCTOR
   new Apache::Fake([option => value, ...])
       The constructor will parse an apache-style config file to retrieve
       any relevant settings, like PerlHandler and PerlSetVar. It will also
       obey local .htaccess-style config files. You can use the 'real'
       config files or provide your own, stripped down versions. The most
       useful configuration is to use the 'real' httpd.conf, but fake
       .htaccess files, so you can provide PerlSetVar and PerlHandler even
       if the web server does not recognize these keywords.

       The following settings are used:

       httpd_conf => '/etc/apache/httpd.conf'
           Path to the main config file. Default is undef, i.e. not used.
           Neccessary for some subrequest functions.

       dir_conf => '.htaccess'
           File name of the per-directory config file. Default is
           '.htaccess'. Only PerlSetVar, PerlModule and PerlHandler are
           used. <Files> sections are currently ignored.

           Caveat: The algorithm searching for a matching file will ascend
           the physical path, not the logical. So it might miss some files,
           and find additional ones. This can be considered a feature.

           One of these two files is neccessary, since you need a
           PerlHandler directive.

       handler_cgi => '/cgi-bin/nph-mod_perl-handler.cgi'
           URI of the handler script. If this parameter is given,
           'virtual_root' must be set as well, and Apache::Fake operates in
           PATH_INFO mode. In this mode, all URLs go like:
           http://host/cgi-bin/nph-mod_perl-handler.cgi/real/path.

       virtual_root => '/home/siteX/modperl_docs'
           Path to the virtual root directory of your mod_perl
           documents/scripts. This directory contains all files accessed
           through Apache::Fake. It should not be inside your normal
           document root.

WARNING
   This is alpha-quality software. It works for me and for some moderately
   complex perl modules (the HTML::Mason suite). Not every aspect was
   tested or checked for strict compatibility to mod_perl 1.27. Please
   report any problems you find via http://rt.cpan.org.

TO DO
   * Emulate Perl*Handlers by calling them in sequence
   * Emulate handler() by emulating some common handlers
   * Emulate subrequests and redirects by doing our own URI->filename
   mapping. Then PerlTransHandlers will work, too.
   * Emulate custom_response via previous mapping
   * Emulate internal redirects via previous mapping
REQUIRED
   perl 5.6.0, Apache::ConfigFile, CGI, CGI::Carp, HTTP::Status

ACKNOWLEDGEMENTS
   This module was inspired by a posting on the HTML::Mason mailing list by
   Alexey Tourbin ([email protected]) and Apache::Emulator by Nigel
   Wetters ([email protected]), both of which were very limited in
   function. Some ideas have been borrowed from both sources.

AUTHOR
   J�rg Walter <[email protected]>.

VERSION
   0.10

SEE ALSO
   the Apache manpage, the Apache::Request manpage