[Mapserver-users] Sending image to stdout under Apache
Dana Quinn
dana at nextbus.com
Wed Mar 5 08:54:32 PST 2003
(sorry if this hits the list twice)
Hi-
I'm sorry, I should have written about what solved the problem
I had back then. (in the thread that Eric referenced). My problem
looked like it was happening because the image data was coming
before the header data. So, I was concerned that some sort of
output buffering was at fault. Acting on a tip I read somewhere,
I added this at the top of my script:
use FileHandle;
STDOUT->autoflush;
I don't know if this sort of thing is usually necessary when using
CGI.pm, but things work great now.
and now my sequence for outputting to the browser goes like this:
print "Content-Type: image/png\r\n\r\n";
$img->saveImage(undef, $mapscript::MS_PNG, $map->{transparent},
$map->{interlace}, 0);
and it works fine.
Now that I think about it, it would probably be better to use
the CGI method:
print $query->header('image/png'); instead of the 'print
"Content-Type... stuff I have there now.
dana
Eric Bridger wrote:
>
> The list archives show that this came up last Dec.
> (http://mapserver.gis.umn.edu/data2/wilma/mapserver-users/0212/msg00265.html) and while a work around was suggested there was no solution to the problem given, so I was wondering if anyone else had run into this problem.
>
> I'm having a problem using Perl mapscript $img->saveImage(undef, ...),
> to send an image, PNG and/or JPEG, to the standard output under Apache.
> Running in /cgi-bin I have the following script:
>
> my $map = new mapscript::mapObj($ms_dir . "/test.map");
>
> my $ref_img = $map->drawReferenceMap();
>
> # This works fine:
> #$ref_img->saveImage("junk.png", $mapscript::MS_PNG,
> $map->{transparent}, $map->{interlace}, 0);
>
> print "HTTP/1.0 200 OK\n";
> print "Content-type: image/png\r\n\r\n";
> binmode STDOUT;
>
> # this produces no output on Apache's STDOUT
> $ref_img->saveImage("", $mapscript::MS_PNG, $map->{transparent},
> $map->{interlace}, 0);
>
> $ref_img->free();
> exit;
>
>
>>From the command line this script works as expected. But when run under
> Apache/mod_perl it's as if the C msSaveImage() stdout stream is
> pointing somewhere other than the Apache stdout (i.e. the client
> browser).
>
> The work around of course is to save a disk file and then print it, but
> the whole point of this is to avoid the temp. disk files. I've noticed
> a significant increase in performance when using mapserv as an image
> engine rather then using temp disk files.
>
> Thanks.
> Eric
>
>
> Setup:
>
> Apache/1.3.26 (Unix)
> Mapserv 3.6.4
> mod_perl 1.22
>
>
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
More information about the MapServer-users
mailing list