[mapserver-dev] Can msIO_stripStdoutBufferContentHeaders() return
headers and be available through MapScript?
Jean-François Gigand
jean-francois at gigand.fr
Tue Jun 14 11:41:01 EDT 2011
Hi,
I did not notice that msIO_stripStdoutBufferContentHeaders() was
available in MapScript. The page you pointed, Stephan, is SWIG's. The
PHP bindings in mapscript/php/php_mapscript.c are statically written
(not based on SWIG) and do not contain the function. The following
check confirms it at runtime:
$ echo '<?php print ms_GetVersion()."\n";
print_r(get_extension_funcs("mapscript"));' | php
MapServer version 6.0.0 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML
SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=CAIRO SUPPORTS=FREETYPE
SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER
SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT
SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI
SUPPORTS=THREADS SUPPORTS=GEOS INPUT=POSTGIS INPUT=OGR INPUT=GDAL
INPUT=SHAPEFILE
Array
(
[0] => ms_GetVersion
[1] => ms_GetVersionInt
[2] => ms_newLineObj
[3] => ms_newRectObj
[4] => ms_newShapeObj
[5] => ms_shapeObjFromWkt
[6] => ms_GetErrorObj
[7] => ms_ResetErrorList
[8] => ms_newOWSRequestObj
[9] => ms_newShapeFileObj
[10] => ms_newMapObj
[11] => ms_newMapObjFromString
[12] => ms_newLayerObj
[13] => ms_newPointObj
[14] => ms_newProjectionObj
[15] => ms_newStyleObj
[16] => ms_newSymbolObj
[17] => ms_newClassObj
[18] => ms_newGridObj
[19] => ms_getCwd
[20] => ms_getPid
[21] => ms_getScale
[22] => ms_tokenizeMap
[23] => ms_ioInstallStdoutToBuffer
[24] => ms_ioInstallStdinFromBuffer
[25] => ms_ioGetStdoutBufferString
[26] => ms_ioResetHandlers
[27] => ms_ioStripStdoutBufferContentType
[28] => ms_ioGetStdoutBufferBytes
)
However, my need was to *fetch* the Content-* headers.
In the mean time, since msIO_stripStdoutBufferContentHeaders() is in
SWIG but not in PHP, I guess it is just missing.
So I added it, attached is a patch, made against trunk rev 11817.
I named the function "ms_ioStripStdoutBufferContentHeaders", following
the naming convention of the other PHP MS bindings.
Best regards,
JF Gigand
2011/6/13 Daniel Morissette <dmorissette at mapgears.com>:
> Maybe we couold add a new ms_ioExtractStdoutBufferHeaders() that would
> extract and return all headers in an array?
>
>
> On 11-06-13 11:59 AM, Stephan Meißl wrote:
>>
>> 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
>>
>>
>> _______________________________________________
>> mapserver-dev mailing list
>> mapserver-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>
>
> --
> Daniel Morissette
> http://www.mapgears.com/
> Provider of Professional MapServer Support since 2000
>
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mapserver_php_msiostripstdoutbuffercontentheaders.diff
Type: text/x-patch
Size: 1926 bytes
Desc: not available
Url : http://lists.osgeo.org/pipermail/mapserver-dev/attachments/20110614/259bdebf/mapserver_php_msiostripstdoutbuffercontentheaders.bin
More information about the mapserver-dev
mailing list