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