Thank you Andy for explaining.
Actually my wrapper is very hard-core, meaning I don't use mapscript
(because I had to build it quickly and didn't have time to research
which was the best approach). Now I have more time and I'd like to tune
things up, so I will definitely start studying mapscript (If you have a
link to a good tutorial/function reference for it I am in your debt).
My wrapper just copied over a template map file, edited it (rewrites
some filters) and then it set
$ENV{'QUERY_STRING'} = $ENV{'QUERY_STRING'}."&map=$file";
...and then called
print `/var/www/cgi-bin/mapserv`;
It's barbaric, I know, but it worked for me. :)
It will take a bit of rewrite to add fcgi support and mapscript, but in
the long run it will be more mantainable... :)
Thanks again,
Adrian
Andy Colson wrote:
Andy Colson wrote:
Adrian Popa wrote:
Hello everyone,
I am currently using a wrapper around mapserv which receives the
URL parameters, builds the map file (actually I only need to set
some filters in the map file, but the filters need to be built
after running some SQL queries with the passed in parameters).
After the map file is built, mapserv is called (as a shell script),
and the map gets sent to the user. Currently this wrapper is
written in perl - so it's not terribly fast as a cgi process.
While this approach works, it is terribly inefficient. I would like
to use mapserv as a fcgi process (or something faster than plain
cgi). My question is - how can I /should I build a wrapper around
mapserv that can "customize" the MAP file on the fly and run as a
fcgi process?
Any ideas on where I should start? An example of such a wrapper?
Also, I suspect I can send parameters to mapserver and use some
sort of variables in the map file to set up my filters - but I
haven't seen an example. Can someone point me to such a documentation?
Thanks,
Adrian
Have you seen mapscript? You can use mapserver directly from perl.
And perl can do fast-cgi. Here is a little, ad-hoc, non-tested,
perl fcgi:
#!/usr/bin/perl
use strict;
use mapscript;
use FCGI;
my $request = FCGI::Request( );
while($request->Accept() >= 0)
{
my($req, $x, $at, $xmap, $xpin, $sid, $y, $q);
$req = new mapscript::OWSRequest();
$req->loadParams();
$xmap = $req->getValueByName('map');
$xpin = $req->getValueByName('pin');
my $map = new mapscript::mapObj( "/maps/$xmap.map" );
if (! $map)
{
#print STDERR "----- Error loading map: $xmap.map\n";
print("Content-type: text/text\r\n\r\n");
print "cant load $xmap.map";
$request->Finish();
next;
}
mapscript::msIO_installStdoutToBuffer();
$x = $map->OWSDispatch( $req );
if ($x)
{
print STDERR "OWSDispatch: $x\n";
my $errObj = new mapscript::errorObj();
while ($errObj) {
print STDERR "ERROR:
$errObj->{code}:$errObj->{message}:$errObj->{routine} \n";
$errObj = $errObj->next();
}
}
my $content_type =
mapscript::msIO_stripStdoutBufferContentType();
$x = mapscript::msIO_getStdoutBufferBytes();
print("Content-type: $content_type\r\n\r\n");
if (mapscript::msGetVersionInt() >= 50500)
{
print $$x;
} else {
print $x;
}
mapscript::msIO_resetHandlers();
$request->Finish();
}
I'd recommend using mapserver 5.6.0.
-Andy
Adrian Popa wrote:
> Thank you,
>
> I will look into it. I guess through mapscript I can redefine the
> parameters that get sent to mapserver? Or do I rewrite the whole map?
>
You can load a map into memory (I assume you were already doing that).
You said "..perl.. receives the URL parameters ...and... builds the
map file".
I assume your perl does: use mapscript?
and at some point: my $map = new mapscript::mapObj( "/maps/$xmap.map" );
You kind of imbed mapserver into your perl script, and can call its
functions and what not. After you load the map you can do things to
it, in memory.
In my example above, I'm using the WMS features ($map->OWSDispatch),
but you can also generate an image:
my $img = $map->draw();
$img->save('x.jpg', $mapscript::MS_JPG);
-Andy
--
---
Adrian Popa
NOC Division
Network Engineer
Divizia Centrul National de Operare Retea
Departament Transport IP & Metro
Compartiment IP Core & Backbone
Phone: +40 21 400 3099
_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users