[mapserver-dev] Can msIO_stripStdoutBufferContentHeaders() return headers and be available through MapScript?

Stephan Meißl stephan at meissl.name
Mon Jun 13 11:59:09 EDT 2011


Jean-François,

in 6.0 the exact function you propose was added (see [1]). It doesn't
return the headers though. I haven't tested the function in PHP
MapScript but it works with Python.

cu
Stephan

[1] http://mapserver.org/mapscript/mapscript.html#mapscript-functions


On Mon, 2011-06-13 at 15:27 +0200, Jean-François Gigand wrote: 
> Hi,
> 
> I use PHP MapScript and handle WxS requests through the "MapScript
> Wrappers for WxS Services", which work fine.
> 
> Since 6.0 I also use OGR output (ZIP of CSV/Shapefiles), which also
> works fine (much thanks, 6.0 kicks ass!).
> 
> Through {,Fast}Cgi, everything is fine.
> But, through (PHP) MapScript, when the WxS request outputs a
> "Content-Disposition" header, the ms_ioStripStdoutBufferContentType()
> function is of no use, as the Content-Type header is not the first
> one, and no MapScript method would extract the "Content-Disposition"
> header anyway.
> 
> To my guess, the perfect solution would be a
> msIO_stripStdoutBufferContentHeaders() function which:
> - would return the headers, not just strip them off, for example
> returning a <char **>
> - would be available through MapScript
> 
> If you confirm the need for this solution, I can develop it and send you a patch
> (just advise me about the function name and prototype (<char***> param
> or <char**> return?).
> 
> So far, I have done this through PHP, see the function below:
> 
>   /**
>    * Strip off Content-* headers from buffer and set them on response object
>    *
>    * @param $buffer  string     Ref to buffer string, which may
> include Content-* headers
>    * @param $reponse Response   Framework-dependant response object to
> add the headers to
>    */
>   function extractContentHeaders(&$buffer, Response $response)
>   {
>     $length = -1;
>     $regex = "/^(Content-[a-zA-Z-]+): ([a-zA-Z0-9.\/=?!_; -]+)\n/";
>     while (strlen($buffer) != $length) {
>       $length = strlen($buffer);
>       $cb = function($m) use ($response) {
>         $response->headers->set($m[1], $m[2]);
>         return '';
>       };
>       $buffer = preg_replace_callback($regex,$cb, $buffer);
>     }
>   }
> 
> 
> Best regards,
> 
> JF Gigand
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev




More information about the mapserver-dev mailing list