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

I am using a simple CGI.pl script to display an image. Using the script, The images do not display however if I take the generated html and save it as an html file it works perfectly. my perl code is

print $q->header, # create the HTTP header $q->start_html('hello world'), # start the HTML $q->img({-src => 'wp-content/uploads/Untitled-1.jpg', -alt => 'Powered by Perl'}), $q->h1('hello world'); # level 1 header

The generated HTML is below.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-U +S"> <head> <title>hello world</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1 +" /> </head> <body> <img src="wp-content/uploads/Untitled-1.jpg" alt="Powered by Perl" /> <h1> hello world </h1>

I have been pounding the table on this one for a few day's now. I have tried moving the image to other locations but to no avail.

Replies are listed 'Best First'.
Re: Using CGI to display images
by zentara (Cardinal) on Jul 28, 2011 at 16:05 UTC
    Do your httpd error logs say anything about it? It seems most likely that its a "path to file" difference. Try putting ./ in front of the path, like ./wp-content/uploads/Untitled-1.jpg or the full system path to the file.

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh

      that was very helpful I have been playing with the path and I am still struggling. I have gone from not found to "exec format error". My error log has the following. The new code is below also.

      [Thu Jul 28 13:59:07 2011] [error] (8)Exec format error: exec of '/usr +/lib/cgi-bin/images/Untitled-1.jpg' failed [Thu Jul 28 13:59:07 2011] [error] [client ::1] Premature end of scrip +t headers: Untitled-1.jpg, referer: http://localhost/cgi-bin/hellopm. +pl my code is below. print $q->header, # create the HTTP header $q->start_html('hello world'), # start the HTML $q->img({-src => 'images/Untitled-1.jpg', -alt => 'Powered by Perl'}), $q->h1('hello world3'); # level 1 header
        You look like you may have the wrong content type. Try
        binmode STDOUT; # a good idea print $q->header(-type => "image/jpeg" );

        I'm not really a human, but I play one on earth.
        Old Perl Programmer Haiku ................... flash japh