thnx for your reply.
I use mod_perl 2 (1.99_08) and CGI.pm 2.91 and Apache 2.0.44. I thought that CGI.pm
wouldnt work at all, so I didnt give any examples.
I wrote a simply script that checks if running under mod_perl,
displays some parameter and evaluates/presents a form.
This script (source below) I implement as simple mod_perl-script one time and as
PerlResponseHandler the other time. As sole mod_perl-script it works
perfect, while as Handler:
* it fails to read the path_info and the CGI-params.
* The startform-method needs an explicit action-argument or it will post
the form to the (nonexisting) url '/e'.
* The cgi->header() method causes an error. "Can't call method
"send_cgi_header" on an undefined value at (eval 6) line 60.".
* And I cant just print out but need to use the $r->print-method.
So my conclusion was/is that CGI.pm does just not work inside an apache-handle.
For the docs of mod_perl-handlers I read perl.apache.org, but I
couldnt find any tutorials about writing handlers in
mod_perl. Especially a description about the methodes and values of
the responsehandler-object.
thnx a lot, peter
the source:
A) the handler
accessed via http://localhost/time
apache-config
PerlModule goldfisch::apache::random
SetHandler modperl
PerlResponseHandler goldfisch::apache::random
package goldfisch::apache::random;
use 5.008;
use strict;
use warnings;
use Apache::RequestRec ();
use Apache::RequestIO ();
use Apache::Const -compile => qw(OK);
use CGI;
sub handler {
my $r = shift;
$r->content_type('text/html');
my $q=new CGI;
my $html='';
# $html.=$q->header(-charset=>'utf-8',-expires=>'now');
$html.='testgoldfisch';
$html.="GOLDFISCH".int(rand(1000))."";
my $mp='no'; $mp=$ENV{MOD_PERL} if(exists $ENV{MOD_PERL});
$html.="running under modperl : ".$mp."\n";
$html.='parameters delivered to the script : ';
my @k=$q->param; foreach(@k) { $html.="$_ = ".$q->param($_)."\n";}
$html.='--';
$html.="path_info CGI = ".$q->path_info()."\n";
$html.="path_info handler = ".$r->path_info()."\n";
$html.='';
$html.=$q->startform(-action=>'/time').$q->textfield(-name=>'test',-size=>50).$q->submit(-value=>'press').$q->endform();$q->end_html;
$r->print($html);
return Apache::OK;
}
1;
B) the mod_perl-script:
accessed via http://localhost/random
Alias /random "/home/htdocs/perl/random.pl"
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
#!/usr/bin/perl -w
# mod_perl
use strict;
use warnings;
use CGI;
my $q=new CGI;
my $html='';
$html.=$q->header(-charset=>'utf-8',-expires=>'now');
$html.='testgoldfisch';
$html.="GOLDFISCH".int(rand(1000))."";
my $mp='no'; $mp=$ENV{MOD_PERL} if(exists $ENV{MOD_PERL});
$html.="running under modperl : ".$mp."\n";
$html.='parameters delivered to the script : ';
my @k=$q->param; foreach(@k) { $html.="$_ = ".$q->param($_)."\n";}
$html.='--';
$html.="path_info CGI = ".$q->path_info()."\n";
$html.="path_info handler = ".$r->path_info()."\n";
$html.='';
$html.=$q->startform(-action).$q->textfield(-name=>'test',-size=>50).$q->submit(-value=>'press').$q->endform();$q->end_html;
print $html;
ps : sorry for this long posting,
On Wed, Apr 02, 2003 at 09:10:17AM +1000, Stas Bekman wrote:
> [EMAIL PROTECTED] wrote:
>
> >I used CGI.pm in my mod_perl-application to get 'path_info', 'param',
> >print out headers and more.
> >None of this works inside my own handlers any more.
>
> Which mod_perl generation are you using? mod_perl 1.0 (1.27?) or mod_perl
> 2.0 (1.99_08?). I suspect that you use mp2, since you mention later
> ResponseHandler, which doesn't exist in mp1. If that's the case, are you
> using the latest CGI.pm version? (older versions are known not malfunction
> with mp2).
>
> If after getting the latest versions you still have problems, please post a
> *simple* several lines handler/script which doesn't work for you. Asking
> *why* CGI.pm doesn't work, is similar to asking why my car doesn't move
> from its place ;) You have to be more specific and then we will be able to
> figure out, what the problem is.
>
> >- whats the maineffect of a simple ResponseHandler at all compared
> >with a perl-program run under mod_perl ? Is it much faster, cause it
> >handles things more efficiently ? By now I used to use an
> >Alias-Directive in apache to direct certains requests to a single
> >perl-script and use path_info() to detect the "additional
> >arguments". For the use there is no difference at all.
>
> If you are talking about perl-scripts running under Apache::Registry or
> Apache::PerlRun, you are in fact running response handlers. The scripts are
> converted to such behind the scenes. In addition registry scripts do a few
> more things, which slow things down just a tiny-bit, probably insignificant
> if you programs are big enough. If you want to explore more, you will find
> this information and a lot more