4

我正在开发的 Web 应用程序需要能够处理同一个 PHP 扩展的两个不同版本。(特别是 MapServer 5.6 的 MapScript 和 Mapserver 6.2 的 MapScript。)

在 php 执行开始之前,脚本不会知道需要加载两个版本中的哪一个。(但每个请求只需要一个扩展名。)

我原本的计划是使用php内置的dl功能,但我发现dl因为安全问题被禁用了。( http://php.net/manual/en/function.dl.php )

在执行期间有什么安全的方法来加载扩展吗?或者也许总是加载两者,但将它们放在不同的命名空间中以便可以单独访问它们?

4

1 回答 1

2

我给了这个问题+1,因为这是一个很好的问题,问得很好。

但是,我无法想象会有一个答案可以满足您的需求。如果扩展在版本之间不向后兼容,那么它显然设计得不好,而且很难看出 PHP 如何对此负责。

我能想到的最佳解决方案是使用两个单独的 php.ini 或 .htaccess 文件,指定扩展的两个单独版本。从您的 Web 服务器运行的 PHP 程序会根据它们所在的目录选择不同版本的扩展。

例如http://myserver/newmaps/program.php,将运行新版本的扩展并http://myserver/oldmaps/program.php运行旧版本的扩展。

然后你只需要在两个目录中有相同的程序。如果它检测到它没有得到它需要的扩展版本,它可以发出一个 http 重定向来加载另一个版本。

于 2012-12-14T15:44:05.047 回答