php mapscript安装¶
- 作者
Jeff McKenna
- 联系方式
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模块的更多信息¶
对于模块中可用的所有类、属性和方法的列表:
通过SWIG(和PHP 7)查看 SWIG API
对于遗留模块,请参见 PHP映射脚本API 参考文件。
有关原始PHP/MapScript模块的更多信息,请参见 PHP/MapScript page 在maptools.org上。
这个 MapServer Wiki 还有PHP/MapScript构建和安装说明以及一些PHP代码片段。
有关模块的问题应转发至 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
MS4W (MapServer For Windows) 是由网关Geomatics维护的一个流行产品,其中包含可以在zipfile或安装程序中使用的Apache、PHP和PHP/MapScript。在MS4W中也可以使用一些开源应用程序。
Windows用户可以按照 Installing Apache, PHP and MySQL on Windows tutorial 在系统上手动安装Apache和PHP。
运行IIS的窗口用户可以 iis.net's howto 用于安装PHP。
注解
在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)
下载最新版本 MS4W base package .
将存档中的文件提取到其中一个驱动器的根目录(例如c:/或d/)。
双击文件/ms4w/apache-install.bat安装并启动apache Web服务器。
在Web浏览器中,转到http://127.0.0.1。您应该看到一个MS4W打开页。您现在运行的是php、php/mapscript和apache。
现在,您可以选择安装为MS4W预先配置的其他应用程序,这些应用程序位于 MS4W download page .
使用Apache服务器手动安装
下载 Apache Web Server 并将其提取到目录的根目录(例如d:/apache)。
下载 PHP 并将其解压缩到您的Apache文件夹(例如D:/Apache/PHP)。
创建一个临时目录来存储mapserver创建的gif。注意:此目录是在 Mapfile 参考。在这个例子中,我们将调用临时目录“ms-tmp”(例如e:/tmp/ms-tmp)。
查找文件 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"
复制文件 php.ini-dist 位于Apache/php目录中,并将其粘贴到WindowsNT文件夹中(例如c:/winnt),然后将此文件重命名为 php.ini 在WindowsNT文件夹中。
如果希望默认加载特定扩展,请打开 php.ini 文件,并取消对相应扩展名的注释。
将文件php_mapscript.dll放入Apache/php/extensions文件夹。
使用Microsoft的IIS安装
(请参阅 MapServer的IIS安装程序 最新步骤的文档)
如果需要,请安装IIS(请参阅 IIS installation procedure )
安装php和php/mapscript(见上文)。
打开Internet服务管理器(例如c/winnt/system32/inetsrv/inetmgr.exe)。
选择默认网站并创建虚拟目录(右键单击,选择新建/虚拟目录)。对于这个示例,我们将调用目录 马萨普斯.
在“别名”字段中输入 msapps 然后单击下一步。
输入应用程序根目录的路径(例如“c:/msapps”),然后单击下一步。
设置目录权限,然后单击“完成”。
选择之前创建的msapps虚拟目录,打开目录属性表(右键单击并选择属性),然后单击虚拟目录选项卡。
单击配置按钮,然后单击应用程序映射选项卡。
单击“添加”,然后在“可执行文件”框中键入: path/to/php/php.exe %s %s 。你必须拥有 %s%s 最后,如果不这样做,PHP将无法正常工作。在扩展框中,键入要与PHP脚本关联的文件扩展名。通常需要关联的扩展是phtml和php。您必须对每个扩展重复此步骤。
在资源管理器中创建一个临时目录来存储MapServer创建的GIF。
注解
此目录是在中的Web对象的ImagePath参数中指定的。 Mapfile . 对于这个示例,我们将调用temp目录 ms_tmp (例如c:/tmp/ms_tmp)。
再次打开Internet服务管理器。
选择默认网站并创建名为 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中的一些神奇之处,我们必须研究一下)
有几种可能的解决方案:
将“setenv ld_library_path”添加到httpd.conf中以包含该目录
编辑/etc/ld.so.conf以添加/usr/local/lib,然后运行“/sbin/ldconfig”。这将永久地将/usr/local/lib添加到系统的运行时lib路径中。
使用以下选项配置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