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

Jean-François Gigand jean-francois at gigand.fr
Mon Jun 13 09:27:03 EDT 2011


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


More information about the mapserver-dev mailing list