MS RFC 66:更好地处理临时文件

日期

2011-01-12

作者

Alan Boudreault(aboudreault,位于mapgears.com)

作者

丹尼尔·莫里塞特(dmorissette at mapgears.com)

最后编辑

2011-01-12

状态

2011-01-17通过

版本

MAPServer 6

概述

目前,我们在Web可访问的imagepath目录中写入一些临时文件,这是一种糟糕的做法,但对于过去的某些用途(例如,在处理时写入connectiontype wms和wfs响应)仍然可以,但是随着对临时文件需求的增加,我们需要确保以适当和安全的方式处理临时文件。

这是一个更好地处理临时文件的建议。目标是添加配置临时路径的能力。

建议的解决方案

文件仍将写入磁盘。临时路径可以通过以下两种方式设置:

  • 环境变量ms_temppath。

  • 在映射文件中

WEB
  TEMPPATH "/tmp/"
END

如果未设置临时路径,函数将根据操作系统尝试标准路径。“/tmp/”用于Linux/Mac,而“c:/temp”用于Windows。大部分工作将是修改mstmpfile函数。

临时文件的目的

  • map context.c:从URL加载ogc web map上下文格式

  • mapgdal.c:mssaveimagegdal()临时文件…实现内存支持

  • mapkmlrenderer.cpp文件:

    • 合并栅格缓冲区

    • 创建图标图像

    • 创建一个包含kml文件的zip文件。使用cpl-zip-api。

  • mapogcfilter.c:应用筛选器后保存映射文件(仅限调试)

  • 地图编号:

    • 保存SLD文件。

    • 应用SLD后保存映射文件(仅限调试)

    • 下载URL引用的符号并创建pixmap

  • 图:

    • 创建zip文件(从查询写入)

    • 创建临时目录(从查询写入)

  • mapscript/php/image.c:保存Web图像

  • mapwfslayer.c:保存GML文件

  • mapwmslayer.c:保存临时请求输出文件

受影响的文件

  • maputil.c:mstmpfile函数。

  • 调用mstmpfile()的所有文件。

未来的增强

默认行为可以更改为在内存中写入临时文件。只有在MAPServer是用gdal/cpl构建的,它具有虚拟IO支持时,这一点才可用。这比在磁盘上写文件更有效。虚拟文件系统接口方法将基于RFC 62 CPL Services 实现,它已经使用内存文件。

这需要实现一些通用函数(或使用msio*函数),以便在可用时使用cpl函数打开/读取/写入/关闭文件。内存文件只能由CPL服务处理。

此增强水泥不是当前RFC的一部分,需要另一个RFC。

臭虫识别码

这里可以找到RFC-66(包含实现)的票据。

门票3354

工具书类

RFC 62 CPL Services

门票35701

投票历史

2011-01-17通过,史蒂文+1,丹尼尔,法兰克,阿塞法伊,佩里克莱斯