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
  <Location /time>
      SetHandler modperl
      PerlResponseHandler goldfisch::apache::random
  </Location>



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.='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN"><HTML><HEAD><title>testgoldfisch</title></HEAD>';
  $html.="GOLDFISCH".int(rand(1000))."<br>";
  my $mp='no'; $mp=$ENV{MOD_PERL} if(exists $ENV{MOD_PERL});
  $html.="running under modperl : ".$mp."<br>\n";

  $html.='parameters delivered to the script : <br>';
  my @k=$q->param; foreach(@k) { $html.="$_ = ".$q->param($_)."<br>\n";}
  $html.='----------<br>';

  $html.="path_info CGI = ".$q->path_info()."<br>\n";
  $html.="path_info handler = ".$r->path_info()."<br>\n";

  $html.='<br><br>';
  
$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"
<Files ~ "\.pl$"> 
  SetHandler perl-script        
  PerlResponseHandler ModPerl::Registry
  Options +ExecCGI
</Files>



#!/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.='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN"><HTML><HEAD><title>testgoldfisch</title></HEAD>';
$html.="GOLDFISCH".int(rand(1000))."<br>";
my $mp='no'; $mp=$ENV{MOD_PERL} if(exists $ENV{MOD_PERL});
$html.="running under modperl : ".$mp."<br>\n";

$html.='parameters delivered to the script : <br>';
my @k=$q->param; foreach(@k) { $html.="$_ = ".$q->param($_)."<br>\n";}
$html.='----------<br>';

$html.="path_info CGI = ".$q->path_info()."<br>\n";
$html.="path_info handler = ".$r->path_info()."<br>\n";

$html.='<br><br>';
$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 at http://perl.apache.org/docs/.
> 
> > I discovered replacements like Apache::Request but I'm now sure if
> > this would work inside a handler.
> 
> Apache::Request works as a drop-in replacement for CGI.pm's request parsing 
> for mp1. It's not yet available for mp2.
> 
> __________________________________________________________________
> Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
> http://stason.org/     mod_perl Guide ---> http://perl.apache.org
> mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
> http://modperlbook.org http://apache.org   http://ticketmaster.com
> 

-- 
mag. peter pilsl
IT-Consulting
tel: +43-699-1-3574035
fax: +43-699-4-3574035
[EMAIL PROTECTED]
http://www.goldfisch.at

Reply via email to