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

Within the project that I am developing, I have to access images located outside the URL.

The folder that contains the images has a path:
/opt/www/images/

Apache has been set to:

<Location /images> order deny,allow Deny from all </Location>

Within the folder are subfolders that are identified by client id numbers.

I am using the CGI::Application Framework along with HTML::Template.

The problem is that I can open the image on a webpage, but all the body text vanishes. Looking in the source of the webpage, you can still see the body.

I have used the following code:
# main.pm ... my $client_id = "73737"; my $get_image = thumbs::get_thumbs($client_id); $content .= "<img src='". $get_image ."'>"; return $content; } ... # thumbs.pm package thumbs; use strict; use CGI::Carp qw(fatalsToBrowser); use CGI; sub get_thumbs { my $client_id = shift; my $q = new CGI; my $path = "/opt/www/images/"; my $file = "/img_1.png"; my $image = $path ."". $client_id ."". $file; print $q->header(-type => 'image/png'); open IMAGE, $image or die "Cannot open $image $!\n"; binmode STDOUT; print <IMAGE>; close IMAGE; return; } 1;

What am I doing wrong?

Replies are listed 'Best First'.
Re: Getting an image but no body text
by davorg (Chancellor) on Oct 12, 2006 at 10:42 UTC

    The "src" attribute on an <img> tag should be set to the URL of the image. You appear to be trying to set it to the actual binary contents of the image. That won't work.

    What you need to do is to set the "src" attribute to point to a CGI program which returns the image data (in much the same way as your existing get_thumbs subroutine does.

    Update: Actually, it's worse than that. I'm not sure what you expect to see in the $get_image variable as your get_thumbs function doesn't return anything. But it _does_ print a CGI header and the image data to STDOUT, thereby taking precedence over anything printed by your main program - which explains why you just see the image and nothing else.

    --
    <http://dave.org.uk>

    "The first rule of Perl club is you do not talk about Perl club."
    -- Chip Salzenberg

Re: Getting an image but no body text
by blazar (Canon) on Oct 12, 2006 at 10:56 UTC
    The problem is that I can open the image on a webpage, but all the body text vanishes. Looking in the source of the webpage, you can still see the body.

    This is obvious since the following:

    print $q->header(-type => 'image/png'); open IMAGE, $image or die "Cannot open $image $!\n"; binmode STDOUT; print <IMAGE>; close IMAGE;

    Will print the appropriate header and send the data constituting the image, which is the reason why you will actually see it in a browser. And that code is called by

    my $get_image = thumbs::get_thumbs($client_id);

    in your main.pm.

    I think you just want in your main.pm to print a src attribute set to an url that will actually call thumbs.pm.

      Yes that worked.

      I called the package via script within the scr, and it worked a treat.

      Thanks for your help.