Ok, a couple of things...

1) You want to move the $r->send_http_header; call up before calling
   $template->process();

2) Modify $template->process( $file, $vars, $r) to
          $template->process( $file, $vars) since you specify OUTPUT => $r
   when you create the Template object (so it's re-dundant).

3) get rid of the $r->print( $output ) line as well, $template->process()
is going to send the output to Apache the way you have it setup.


4) As David Ranney pointed out in a previous post, you might want to
put your images somewhere else, or adjust your URL

You get a path_info part only for the virtual component of your URL
(ie. there's no filesystem component beyond /tt ), but your URL for
images/hello.gif is relative to /tt, which means your handler for
<Location /tt> has got to fix things up.

...or..

If you make the URL hello.gif to resolve to something outside /tt,
then Apache should serve it up as a regular file, which I suspect is
what you want.

HTH

Lyle
 
                                                                                
                                                                                
                                                                                
Quoting Tim Noll ([EMAIL PROTECTED]):
> Whoops, I hacked up my example a little to make it easier it to read,

> and I accidentally removed the line:
> $file =~ s{^/}{};
> But, it was in the original. Really. :-)
> 
> -Tim
> 
> 
> ----- Original Message -----
> From: "Lyle Brooks" <[EMAIL PROTECTED]>
> To: "Tim Noll" <[EMAIL PROTECTED]>
> Cc: <[EMAIL PROTECTED]>
> Sent: Tuesday, February 05, 2002 4:42 PM
> Subject: Re: image corruption
> 
> 
> > When I try this example, I find that this line
> >
> > >  my $file = $r->path_info;
> >
> > will set $file to "/index.html" when I request the URL /tt/index.html
> >
> > which leads to an error message that says,
> >
> > reason: file error - /index.html: absolute paths are not allowed (set
> ABSOLUTE option)
> >
> > You may want to clip off the leading slash or set the Template Toolkit
> > option ABSOLUTE, depending on which suits your needs.
> >
> > Quoting Tim Noll ([EMAIL PROTECTED]):
> > > I'm attempting to use mod_perl and Template Toolkit to serve up
> > > templates. However, I'm having a problem with the images in those
> > > templates: They're passing through the content handler, and thus
> getting
> > > corrupted.
> > >
> > > My first thought was to return DECLINED from the content handler if
> the
> > > request is not for text/html content; however, since I'm using a
> > > Location directive, the content_type is always empty since there's
> no
> > > direct mapping to an actual image file. I could use an Alias to map
> the
> > > URI to the file, but then I wouldn't have the path_info that I'm
> using
> > > to call the template.
> > >
> > > Since my test code, using path_info, is based on an example from the
> > > Template Toolkit docs, I feel like I'm probably overlooking
> something
> > > basic. So, I'd appreciate it if someone could show me the error of
> my
> > > ways. :-)
> > >
> > > Here are the relevant chunks of config and code:
> > >
> > > from httpd.conf
> > > ---------------
> > > ...
> > > <Location /tt>
> > >  SetHandler perl-script
> > >  PerlHandler Apache::Test::Mod
> > >  PerlSetVar WEBROOT /usr/local/apache/tt/html
> > > </Location>
> > > ...
> > >
> > > Apache::Test::Mod
> > > -----------------
> > > ...
> > > sub handler {
> > >  my $r = shift;
> > >
> > >  # this doesn't work
> > >  #return DECLINED unless $r->content_type eq 'text/html';
> > >
> > >  my $WEBROOT = $r->dir_config('WEBROOT')
> > >   or return fail( $r, SERVER_ERROR, "'WEBROOT' not specified" );
> > >
> > >  my $file = $r->path_info;
> > >
> > >  my $vars = {
> > >   content  => $r->content_type,
> > >  };
> > >
> > >  $r->content_type('text/html');
> > >  $r->no_cache(1);
> > >
> > >  my $template = Template->new( {
> > >   INCLUDE_PATH => "$WEBROOT:$WEBROOT/include",
> > >   OUTPUT   => $r,
> > >  } );
> > >  $template->process( $file, $vars, $r)
> > >   or return fail( $r, SERVER_ERROR, $template->error );
> > >
> > >  $r->send_http_header();
> > >  $r->print( $output );
> > >
> > >  return OK;
> > > }
> > > ...
> > >
> > > index.html (test template)
> > > --------------------------
> > > <html>
> > >  <head>
> > >   <title>test</title>
> > >  </head>
> > >  <body>
> > >   <p>content_type: [% content %]</p>
> > >   <p>image: <img src="images/hello.gif"></p>
> > >  </body>
> > > </html>
> > >
> > >
> > > Thanks.
> > >
> > > -Tim
> > >
> > >
> >
> 

Reply via email to