【问题标题】:Communication between two PHP applications on the same server?同一服务器上的两个 PHP 应用程序之间的通信?
【发布时间】:2012-12-28 07:11:56
【问题描述】:

我正在开发一个包含两个组件的项目:

1) 一个是 CodeIgniter 框架,我将在其中构建所有自定义代码。

2) 另一个是亚马逊的 MWS API PHP SDK 库。

问题是,我的 CodeIgniter 代码和 Amazon 的 SDK 都需要它们自己的 autoload()。

Amazon 的 SDK 也进一步分为 3-4 个组件,每个组件都有自己的自动加载功能,因此如果您想在同一会话中使用 Products 的 SDK,然后使用 Reports SDK,您会遇到已经定义了自动加载功能。

出于这个原因,我正在考虑建立一个网络服务系统,用于我自己的代码和亚马逊的 SDK 文件之间的通信,即使它们在同一台服务器上,但至少这样可以避免命名冲突.即,我将向 CodeIgniter 外部的文件发送 HTTP 请求,该文件将处理 Amazon 的 SDK,并以 JSON 或 XML 格式返回响应。

我不认为命名空间是一种选择,因为我不想遍历 SDK 中的每个文件/类并添加命名空间语句。

我的问题是,我应该注意此方法是否存在任何性能问题?除了命名空间之外,还有什么方法可以避免这种方法?

【问题讨论】:

  • 我的印象是,如果库使用 SPL 自动加载器,那么几个可以共存。他们都真的使用旧的__autoload() 功能吗?我应该认为,如果两个亚马逊包因此不能很好地协同工作,那么有人已经将它作为错误/改进票提出了。
  • @halfer 我已经下载了最新的 SDK,是的,他们确实使用了旧版的 __autoload
  • 你不能同时使用几个真是太奇怪了!好吧,如果不存在的话,我会为此提出一张票。另一种方法:是否可以不为 Amazon 和 CI 加载自动加载器,而自己编写将它们粘合在一起?
  • @halfer 感谢您的帮助。不,我认为这会导致很多麻烦,因为 SDK 自动加载器正在使用包含路径做一些棘手的事情。但是,感谢您提醒我有关 SPL 自动加载的信息,这可能会解决我的问题。如果您想发布一个快速显示如何使用 SPL 自动加载器的答案,我会接受。
  • 很高兴@lbmurai 拥有它:)

标签: php codeigniter architecture project-planning amazon-mws


【解决方案1】:

只需将它们的自动加载功能复制到一个单独的文件中,重命名它们,然后将它们与spl_autoload_register 连接起来:

<?php
function loadFrameworkOne($name) {
    // contents of __autoload from framework one.
}
function loadFrameworkTwo($name) {
    // contents of __autoload from framework two.
}
spl_autoload_register('loadFrameworkOne');
spl_autoload_register('loadFrameworkTwo');

这又快又脏,我想不通;)

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2014-11-21
    • 2016-02-27
    • 2019-09-04
    • 2011-08-06
    • 2014-03-07
    • 2011-03-08
    • 2013-12-02
    相关资源
    最近更新 更多