php mapscript安装

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2020-01-17

介绍

php/mapscript模块是一个php动态加载模块,它使mapserver的mapscript函数和类在php环境中可用。

mapscript的原始版本(在perl中)使用 SWIG ,但当时SWIG不支持PHP语言,因此PHP模块必须单独维护,并且不总是与其他映射脚本同步。从MapServer 7.4.0开始,PHP/MapScript也可以通过 SWIG API .

最初的PHP模块是由 DM Solutions Group and Mapgears and is currently maintained by Gateway Geomatics 以及其他贡献者。

本文档假定您已经熟悉操作系统的某些方面:

  • 对于UNIX/Linux用户,熟悉构建环境,尤其是 make.

  • 对于Windows用户,如果您没有预编译安装的访问权限,并且需要使用php/mapscript模块编译自己的mapserver副本,则需要一些编译技能。

支持哪个版本的PHP?

PHP MapScript最初是为PHP-3.0.14开发的,但在MapServer 3.5放弃了对PHP3的支持之后。在本文档的最后一次更新中,需要使用PHP 5.6或更高版本,建议使用PHP 7。

mapscript和php版本的最佳组合是:

  • MapScript7.4.0和PHP7.0及更高版本(通过新的 SWIG API

  • 使用php 5.2.1及更高版本的mapscript 4.10

  • 使用php 4.4.6及更高版本的mapscript 4.10

备注

从MapServer 7.4.0开始,php7可以通过 SWIG API ,并且鼓励所有现有的MapServer用户更新其脚本以使用新的SWIG语法;请参见 MapServer迁移指南 例如语法。

如何获取有关mapserver的php/mapscript模块的更多信息

  • 对于模块中可用的所有类、属性和方法的列表:

  • 有关原始PHP/MapScript模块的更多信息,请参见 PHP/MapScript page 在maptools.org上。

  • 这个 MapServer Wiki 还有PHP/MapScript构建和安装说明以及一些PHP代码片段。

  • 因为许多用户依赖 MS4W 对于MapScript,您还可以在 MS4W wiki .

  • 有关模块的问题应转发至 MapServer mailing list .

获取、编译和安装php和php/mapscript模块

下载php和php/mapscript

  • 可以从 PHP web site .

  • 一旦您验证了PHP已经安装并且正在运行,您就需要获取最新的 MapServer source 编译mapserver和php模块。

在服务器上设置PHP

Unix

  • 检查是否已经安装了PHP(几个Linux发行版都内置了它)。

  • 如果没有,请参阅PHP手册“ Installation on Unix systems “剖面图。

Windows

备注

在Windows上设置PHP时,请确保将PHP配置为CGI,而不是Apache模块,因为php_mapscript.dll不是线程安全的,不能作为Apache模块工作(请参见 Example Steps of a Full Windows Installation 本文件第节)。

构建/安装php/mapscript模块

在Linux设备上构建

注意:对于UNIX用户,请参见mapserver源中的readme.configure文件,或参见 在Unix上编译 怎么办?

  • 主mapserver配置脚本将自动设置主makefile以编译php_mapscript。 --WITH_PHP=ON 配置脚本的参数。

    备注

    从MapServer 7.4.0开始,您可以通过 --WITH_PHPNG=ON 通过 SWIG API .

  • 将php_mapscript.so库复制到php扩展目录,然后使用dl()函数在php脚本的开头加载模块。另请参见php函数 extension_loaded() 以检查扩展是否已加载。

    备注

    从PHP 5.3开始,不推荐使用dl()函数。

  • 文件 mapscript/php/examples/phpinfo_mapscript.phtml 将测试php_mapscript模块是否已正确安装并可以加载。

  • 如果您从PHP得到一个错误,抱怨它无法加载库,那么请确保您重新编译并重新安装了支持动态库的PHP。在Redhat 5.x和6.x上,这意味着在运行后将“-rdynamic”添加到主php3 make file中的cldflags中。/configure还应确保phpu mapscript.so路径中的所有目录对于httpd用户(通常为“nobody”)至少是r-x,否则dl()可能会抱怨即使文件在那里也找不到该文件。

在Windows上构建

  • 对于Windows用户,建议在 MapServer download page 或者使用 MS4W 安装程序。

  • 如果出于某种原因,您确实需要编译自己的Windows二进制文件,请参阅MapServer源中的readme.win32文件(祝您好运!).

安装php/mapscript

只需将文件php_mapscript.dll复制到php extensions目录(patto/php/extensions)

使用PHPoP()

要验证是否正确安装了php和php/mapscript,请创建一个包含以下代码的“.php”文件,并尝试通过Web服务器访问该文件:

<HTML>
<BODY>

<?php
  if (PHP_OS == "WINNT" || PHP_OS == "WIN32")
  {
    dl("php_mapscript.dll");
  }
  else
  {
    dl("php_mapscript.so");
  }
  phpinfo();
?>

</BODY>
</HTML>

如果正确安装了php和php/mapscript,那么页面上应该显示几个表,并且“extensions”表中应该列出“mapscript”。

完整Windows安装的示例步骤

使用MS4W(MapServer for Windows)

  1. 下载最新版本 MS4W base package .

  2. 将存档中的文件提取到其中一个驱动器的根目录(例如c:/或d/)。

  3. 双击文件/ms4w/apache-install.bat安装并启动apache Web服务器。

  4. 在Web浏览器中,转到http://127.0.0.1。您应该看到一个MS4W打开页。您现在运行的是php、php/mapscript和apache。

  5. 现在,您可以选择安装为MS4W预先配置的其他应用程序,这些应用程序位于 MS4W download page .

使用Apache服务器手动安装

  1. 下载 Apache Web Server 并将其提取到目录的根目录(例如d:/apache)。

  2. 下载 PHP 并将其解压缩到您的Apache文件夹(例如D:/Apache/PHP)。

  3. 创建一个临时目录来存储mapserver创建的gif。注意:此目录是在 Mapfile 参考。在这个例子中,我们将调用临时目录“ms-tmp”(例如e:/tmp/ms-tmp)。

  4. 查找文件 httpd.conf 在Apache的conf目录中,在文本查看器(如textpad、emacs、notepad)中打开它。

    Alias 在该文件的节中,将别名添加到ms_tmp文件夹和您需要的任何其他文件夹(对于本例,我们将使用 msapps 文件夹):

    Alias   /ms_tmp/   "path/to/ms_tmp/"
    Alias   /msapps/   "path/to/msapps/"
    

    ScriptAlias 在该文件的节中,为PHP文件夹添加别名。

    ScriptAlias    /cgi-php/     "pathto/apache/php/"
    

    AddType 在该文件的节中,添加php文件的类型。

    AddType application/x-httpd-php   .php
    

    Action 在该文件的节中,为php.exe文件添加一个操作。

    Action application/x-httpd-php    "/cgi-php/php.exe"
    
  5. 复制文件 php.ini-dist 位于Apache/php目录中,并将其粘贴到WindowsNT文件夹中(例如c:/winnt),然后将此文件重命名为 php.ini 在WindowsNT文件夹中。

  6. 如果希望默认加载特定扩展,请打开 php.ini 文件,并取消对相应扩展名的注释。

  7. 将文件php_mapscript.dll放入Apache/php/extensions文件夹。

使用Microsoft的IIS安装

(请参阅 在IIS上运行地图服务器 最新步骤的文档)

  1. 如果需要,请安装IIS(请参阅 IIS installation procedure

  2. 安装php和php/mapscript(见上文)。

  3. 打开Internet服务管理器(例如c/winnt/system32/inetsrv/inetmgr.exe)。

  4. 选择默认网站并创建虚拟目录(右键单击,选择新建/虚拟目录)。对于这个示例,我们将调用目录 马萨普斯.

  5. 在“别名”字段中输入 msapps 然后单击下一步。

  6. 输入应用程序根目录的路径(例如“c:/msapps”),然后单击下一步。

  7. 设置目录权限,然后单击“完成”。

  8. 选择之前创建的msapps虚拟目录,打开目录属性表(右键单击并选择属性),然后单击虚拟目录选项卡。

  9. 单击配置按钮,然后单击应用程序映射选项卡。

  10. 单击“添加”,然后在“可执行文件”框中键入: path/to/php/php.exe %s %s 。你必须拥有 %s%s 最后,如果不这样做,PHP将无法正常工作。在扩展框中,键入要与PHP脚本关联的文件扩展名。通常需要关联的扩展是phtml和php。您必须对每个扩展重复此步骤。

  11. 在资源管理器中创建一个临时目录来存储MapServer创建的GIF。

    备注

    此目录是在中的Web对象的ImagePath参数中指定的。 Mapfile . 对于这个示例,我们将调用temp目录 ms_tmp (例如c:/tmp/ms_tmp)。

  12. 再次打开Internet服务管理器。

  13. 选择默认网站并创建名为 ms_tmp (右键单击,选择新建/虚拟目录)。设置ms-tmp目录的路径(例如c:/tmp/ms-tmp)。目录权限至少应设置为读/写访问。

常见问题/常见问题

有关文档的问题

Q

是否有可用的文档?

A

主要参考文件是 SWIG API (或遗产 PHP MapScript reference ),它描述与PHP/MapScript模块关联的所有当前类、属性和方法。

要更完整地描述每个类及其成员变量的含义,请参见 MapScript reference 以及 MapFile reference .

这个 MapServer Wiki 还有PHP/MapScript构建和安装说明以及一些PHP代码片段。


Q

在哪里可以找到示例脚本?

A

目录中包含一些示例 mapserver/mapscript/php/examples/ 在MapServer源分发中。一个好的开始是 test_draw_map.phtml :这是一个非常简单的脚本,只需在HTML页面中绘制地图、图例和比例尺。

一个好的中间例子是 PHP MapScript By Example guide (请注意,此文档是为早期的MapServer版本创建的,但代码可能仍然有用)。

因为许多用户依赖 MS4W 对于MapScript,您还可以在 MS4W wiki .

最初的例子是“gmap demo”,从 MapTools.org download page .

关于安装的问题

Q

如何判断模块是否已正确安装在我的服务器上?

A

创建名为phpinfo.phtml的文件,其中包含以下内容:

<?php  dl("php_mapscript.so");
       phpinfo();
?>

请确保将php_mapscript.so替换为安装它的名称,它可以是Unix上的php_mapscript_74.so,也可以是Windows上的php_mapscript_74.dll

然后您可以尝试第二个测试页 mapserver/mapscript/php/examples/test_draw_map.phtml . 此页面只需打开一个MapServer.map文件,并在HTML页面中插入其地图、图例和比例尺。修改页面以访问您自己的MapServer.map文件,如果您得到了预期的结果,那么一切都可能正常工作。


Q

我尝试在浏览器中显示.phtml或.php页面,但页面显示方式与记事本相同。

A

问题是,您的PHP安装无法将“.phtml”识别为PHP文件扩展名。假设您在Apache下使用PHP,那么需要将以下行与httpd.conf中与PHP相关的其他AddType行一起添加:

AddType application/x-httpd-php .phtml

有关更详细的解释,请参见 Example Steps of a Full Windows Installation 本文件的章节。


Q

I installed PROJ (formerly `PROJ.4`), GDAL, and other support libraries on my system, they are recognized by MapServer's "configure" as a system lib but at runtime I get an error: "libproj.so.0: No such file or directory".

A

如果发生这种情况,您可能正在运行Redhat Linux系统。发生这种情况的原因是库安装在/usr/local/lib下,但系统默认情况下,此目录不是运行库路径的一部分。

(我仍然很惊讶“configure”选择PROJ作为系统库,因为它不在系统的库路径中……可能是autoconf中的一些神奇之处,我们必须研究一下)

有几种可能的解决方案:

  1. 将“setenv ld_library_path”添加到httpd.conf中以包含该目录。

  2. 编辑/etc/ld.so.conf以添加/usr/local/lib,然后运行“/sbin/ldconfig”。这将永久地将/usr/local/lib添加到系统的运行时lib路径中。

  3. 使用以下选项配置MapServer:

    --with-proj=/usr/local --enable-runpath
    

    并且/usr/local/lib目录将被硬编码到exe和.so文件中。

我(DanielMorissette)个人更喜欢选项2,因为它是永久的,适用于系统上运行的所有内容。


Q

是否必须将php/mapscript设置为CGI?如果是,为什么?

A

是的,请看 PHP/MapScript CGI page 在MapServer wiki中获取详细信息。


Q

我将php编译为cgi,当php尝试加载php_mapscript时,我得到一个“未定义的符号:_register_list_destructors”错误。发生了什么?

A

您的php-cgi可执行文件可能没有链接到支持加载共享库。mapserver配置脚本必须向您提供一条消息,说明要添加到php makefile中的标志,以启用共享libs。

编辑主php makefile并将“-rdynamic”添加到makefile顶部的ldflags,然后重新链接php可执行文件。

**注意:**要添加到ldflags的实际参数可能因运行的系统而异。在Linux上是“-rdynamic”,在*bsd上是“-export dynamic”。


Q

mapscript和php版本的最佳组合是什么?

A

最佳组合是:

  • MapScript7.4.0和PHP7.0及更高版本(通过新的 SWIG API

  • 使用php 5.2.1及更高版本的mapscript 4.10

  • 使用php 4.4.6及更高版本的mapscript 4.10