http://www.perlmonks.org?node_id=607975

monkfan has asked for the wisdom of the Perl Monks concerning the following question:

Hi,
I have the following Perl script that uses HTML::Template to generate a static webpages. And I want it to include the image "test.png" in the page.
use strict; use Data::Dumper; use Carp; use HTML::Template; # open the html template my $template = HTML::Template->new( filename => 'test.tmpl' ); # fill in some parameters $template->param( HOME => $ENV{HOME} ); $template->param( PATH => $ENV{PATH} ); $template->param( FIG => "/home/monkfan/public_html/SPACE-Web2/test.p +ng" ); # send the obligatory Content-Type and print the template output print $template->output;
And the template is:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w +3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <html><body bgcolor = white font = courier><head><title>Your SPACE Web + Results</title></head> <body> My Home Directory is <TMPL_VAR NAME=HOME> <p> My Path is set to <TMPL_VAR NAME=PATH> <p> <img src="<TMPL_VAR NAME=FIG>"> </body> </html>
Although the source of the HTML it generated is this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w +3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <html><body bgcolor = white font = courier><head><title>Your SPACE Web + Results</title></head> <body> My Home Directory is /home/monkfan <p> My Path is set to /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/ +X11R6/bin:/home/monkfan/bin <p> <img src="/home/monkfan/public_html/SPACE-Web2/test.png"> </body> </html>
I still can't see the figure ("test.png") from the browser, even though the path is already correct. Can anybody suggest what's wrong with my setting?

Update: It's solved. Thanks so much for all the suggestions. Foolish me.
Regards,
Edward

Replies are listed 'Best First'.
Re: Howto Include Image with HTML::Template
by rsiedl (Friar) on Apr 03, 2007 at 05:52 UTC
    your path needs to be set relative to the root directory of your webserver.

    i.e. if your webpage is served out public_html you should just use: /SPACE-Web2/test.png
      Hi,
      I forgot to mentioned that my Perl script with HTML::Template is stored under:
      /home/monkfan/public_html/SPACE-Web2/cgi-bin
      And the figure is stored under:
      /home/monkfan/public_html/SPACE-Web2
      Even though I've modified that script to have this:
      $template->param( FIG => "../test.png" );
      It still doesn't show the figure.

      Regards,
      Edward
        have you tried making it relative to your root web directory?
        also, perhaps check the file permissions on the directory and image.
        $template->param( FIG => "/SPACE-Web2/test.png" );

        if it doesn't work , then use full URL such like

        http://www.domain.com/test.png

Re: Howto Include Image with HTML::Template
by idle (Friar) on Apr 03, 2007 at 05:59 UTC
    Your home dir is not web-server home dir(ServerRoot) and web-server can not see anything outside. Consider use relative paths rather then absolute, i.e. if your DocumentRoot=/home/monkfan/public_html, its should look like src="/SPACE-Web2/test.png".
    Updated. And check web-server logs, its will show you where its looked for image.