cgi script to print all .png files on a single page

Hi guys

I'm relativley new to Perl, and have not touched html before, im trying to write a cgi script that prints all images on a single html page from a given directory. Im using perl to gather stats, rrdtool to update and create graphs now i just need to print these graphs all onto 1 index.cgi page.

The page appears but no images

I need to do it dynamically as new graphs will appear in the future, otherwise i could just add them 1 by 1.

Heres the code i have so far, can anyone suggest if and what im doing wrong here?

#!/usr/bin/perl -w

use strict;
use CGI;

my $cgi = new CGI;
my $image = $cgi->param('image');

print "Content-type: text/html\n\n";

print "<html><head><title>$image</title></head>\n";
print "<body>\n";
print "<center>\n";
print "<img src=/var/www/html/$image><p>\n";
print "</center>\n";
print "</body>\n";
print "</html>\n";

Thanks very much
Jeffers

The reason the images aren't showing is that the img-tag requires the path is based on the servers document root. Eg, if your document root is /var/www/html and the images full path is /var/www/html/images/stats1.png, it would have to be included in one of these 2 ways:

<img src="/images/stats1.png"> <!-- Absolute -->
<img src="images/stats1.png"> <!-- Relative, assuming your script resides in the document root -->

However, if you want to do more than just a bit of dynamic web sites, read up (at least) on HTML/XHTML, maybe CSS, and get a copy of CGI Programming with Perl, just to cover the basics.

Thanks Pludi for your reply

I did try changing the path but it didn't have the desired affect. I first had issues with enabling cgi, but i think i've solved that now, i've done the following in order to get the images appearing...

DirectoryIndex includes the index.cgi extension
AddHandler cgi-script .cgi is uncommented

httpd.conf is as follows

ScriptAlias /cgi-bin/ "/var/www/html" 
<Directory "/var/www/html/">
    AllowOverride None
    Options None FollowSymLinks +ExecCGI
    Order allow,deny
    Allow from all
</Directory>

DocumentRoot
<Directory "/var/www/html">
 

I changed the directory as you suggested

print "<img src=rrdtool/$image><p>\n";

Source code from the site

<html><head><title></title></head>
<body><center>
<img src=rrdtool/><p>
</center></body></html>

isn't their any easier way to include each image in the directory than using a bunch of print commands, would it be easier to use some kind of for each loop in a perl script??

thanks for your help

---------- Post updated 06-05-10 at 00:55 ---------- Previous update was 06-04-10 at 22:58 ----------

OK now im completely confused,

i just tried looking in the directory where all my images are stored and i get an error saying Forbidden, i changed the following and it worked again, could it be that i have the cgi config setting all screwed up ??

was

ScriptAlias /cgi-bin/ "/var/www/html" 
<Directory "/var/www/html/">

now

ScriptAlias /cgi-bin/ "/var/www/cgi-bin" 
<Directory "/var/www/cgi-bin/">

now that ive changed it i get the forbidden error when trying to access the url
http://mywebserver/pass.cgi

when i used to get the following from the apache log file

[Fri Jun 04 23:03:01 2010] [error] [client 10.20.20.20] Use of uninitialized value in concatenation (.) or string at /var/www/html/pass.cgi line 9.
[Fri Jun 04 23:03:01 2010] [error] [client 10.20.20.20] Use of uninitialized value in concatenation (.) or string at /var/www/html/pass.cgi line 11.
[Fri Jun 04 23:03:01 2010] [error] [client 10.20.20.20] Directory index forbidden by Options directive: /var/www/html/rrdtool/, referer: http://mywebserver/pass.cgi

I guess the last line is stopping the cgi script from working, i dont understand this.

Randomly changing settings without knowing what they're doing seldom solves a problem (even if it's a nice learning experience).

Change back the httpd.conf settings. The Directory directive needs a real path as an argument, not an Alias.

The Forbidden message came up because Apache, by default, does not allow directory indexing as a security measure. That does not mean that you can't access the files inside, it only means you'll have to know the exact name.

And your script does exactly what you told it to (which isn't necessarily what you wanted). It takes the name of an image as an argument, and displays said image. So you'd have to call it as http://mywebserver/pass.cgi?image=test.png it would display the image "test.png" from the directory /var/www/html/rrdtool/