2009-08-10 88 views
2

我正在尝试将一个旧的PHP广告管理系统集成到一个基于Python的Web应用程序(Django)中。 PHP和Python代码都安装在相同的主机上,PHP通常由mod_php5和Python通过mod_wsgi执行。从Python调用PHP代码

现在我想知道从我的Python代码中以最有效的方式调用此PHP广告管理代码的最佳方式是什么(必须为每个页面多次调用广告管理代码)?

的解决方案,我想出了到目前为止,有以下几种:在PHP中的广告管理代码

  1. 写SOAP接口,并用Python语言编写一个SOAP客户端,然后调用相应的功能。

    我看到的问题是,这会显着减慢Python代码的执行速度,因为对于每个服务页面而言,后台都需要多个SOAP客户端请求。

  2. 使用PHP命令行界面通过os.execvp()或subprocess.Popen()调用PHP代码。

    这里的问题是PHP代码使用Apache环境($ _SERVER vars和其他超全局变量)。我不确定这是否可以正确模拟。

  3. 用Python重写广告管理代码。

    这可能是最后的手段。这则广告管理代码只是运行和运行,并没有一个剩下的是谁写的一段代码这个:)我会颇为忌惮做到这一点;)

任何其他的想法或提示如何可以做到?

谢谢。

+1

强制性:使用python做所有事情,在python – nosklo 2009-08-10 13:50:27

+0

中重写PHP部分你是对的,那将是第三种选择,但这将是一个_huge_任务,我想。 – Haes 2009-08-10 14:20:45

回答

4

如何使用浏览器中的AJAX加载广告?

例如(使用JQuery):

$(document).ready(function() { $("#apageelement").load("/phpapp/getads.php"); }) 

这可以让你保持你的应用程序几乎完全从PHP应用程序分开。

+1

有趣的解决方案,我没有想到这一点。当然,如果Javascript被禁用,这将不起作用,所以我需要检查这是否是需求。 – Haes 2009-08-10 14:18:41

+0

或者,您可以直接从Python向php应用程序发出请求。尝试urllib2:http://docs.python.org/library/urllib2.html – Mark 2009-08-10 15:12:21

2

最好的解决方案是使用服务器端包括。大多数Web服务器都支持这一点。

例如这是怎么会在nginx的完成:

<!--# include virtual="http://localhost:8080/phpapp/getads.php" --> 

你的Web服务器,然后将动态地从你的PHP后台请求,并将其插入到该进入客户端的响应。没有必要的JavaScript,并且完全透明。

你也可以使用一个无国界的

+0

绝对不推荐使用iframe – 2009-08-10 22:08:19

0

我已经通过Apache直接服务于PHP部分做到了这一点,在过去。您可以将它们放入媒体文件(/ site_media/php /)中,或者如果您希望为媒体服务器使用更轻量级的设备(如lighttpd),则可以通过apache设置另一部分站点已启用PHP。从那里,你可以在你的模板中使用ajax路由,或者你可以使用urllib(2)或httplib(2)从你的视图中加载PHP。更好的是,将urllib2调用包装在模板标签中,然后在模板中调用它。