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

Friends,

I am learning about GD.pm and CGI programming and I tried this ...
#!/usr/local/bin/perl -w ### ### use strict; use CGI; use CGI::Carp qw /fatalsToBrowser/; my $out = new CGI; use GD; # create a new image my $im = new GD::Image(100,100); # allocate some colors my $white = $im->colorAllocate(255,255,255); my $black = $im->colorAllocate(0,0,0); my $red = $im->colorAllocate(255,0,0); my $blue = $im->colorAllocate(0,0,255); # make the background transparent and interlaced $im->transparent($white); $im->interlaced('true'); # Put a black frame around the picture $im->rectangle(0,0,99,99,$black); # Draw a blue oval $im->arc(50,50,95,75,0,360,$blue); # And fill it with red $im->fill(50,50,$red); #write to image.png open( FH, '>image.png' ) or die "Can't image.png:$!\n"; # make sure we are writing to a binary stream binmode FH; # Convert the image to PNG and print it on standard output print FH $im->png; close FH; print $out->header( 'text/html' ); print <<HTML; <html> <head><title>GD test</title></head> <body> <img src='image.png'> </body> </html> HTML
When I run from the command line I get this ...
~/cgi-bin/GD$ ./GDtest.pl Content-Type: text/html; charset=ISO-8859-1 <html> <head><title>GD test</title></head> <body> <img src='image.png'> </body> </html>
But when I execute the CGI with my browser all I get is broken image?
Can anyone give me a pointer or two?
Thanks

Plankton: 1% Evil, 99% Hot Gas.

Replies are listed 'Best First'.
Re: GD newbee question
by matthewb (Curate) on Nov 02, 2003 at 06:45 UTC
    As Mr. Muskrat suggests, this is more to do with your appreciation of web server layout and permissions than Perl. If I run your script right here and then tail the error.log, I get:
    [Sun Nov 2 06:36:56 2003] [error] [client 127.0.0.1] file permissions + deny server execution: /usr/lib/cgi-bin/image.png
    If, however, I modify the open line to write a file in the document root and, in the HTML section, change the img src to look like this:
    <img src="/image.png" alt="a red circle" />
    ...I get a red circle, which I guess is what you are after.

    MB
      Ah! Thanks!
      I changed these lines ...
      open( FH, '>image.png' ) or die "Can't image.png:$!\n"; . . . <img src='image.png'>
      ... to ...
      open( FH, '>../public_html/image.png' ) or die "Can't image.png:$!\n"; . . . <img src='/image.png'>
      ... and now it works! Thanks.

      Plankton: 1% Evil, 99% Hot Gas.
Re: GD newbee question
by Mr. Muskrat (Canon) on Nov 02, 2003 at 04:46 UTC

    And the server log says what? And does the user that the web server runs as have access to write to this directory?