First of all, let me apologize for the hacked-up code I sent with my
original post. I was actually trying to return my current code back to
something that looked more like the TT sample code, but I clearly didn't
do a very good job. (In my actual code, I've moved
$r->send_http_header() until after the $template->process() call so that
I can trap file not found errors.)

In any case, thanks to David Ranney. Adding this to my config file does
the trick:

Alias /tt/images /usr/local/apache/tt/html/images
<Location /tt/images>
    SetHandler default-handler
</Location>

Thanks.

-Tim


----- Original Message -----
From: "Lyle Brooks" <[EMAIL PROTECTED]>
To: "Tim Noll" <[EMAIL PROTECTED]>
Cc: "Lyle Brooks" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Tuesday, February 05, 2002 5:54 PM
Subject: Re: image corruption


>
> 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