从Python调用PHP代码

时间:2009-08-10 13:13:10

标签: php python

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

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

到目前为止我提出的解决方案如下:

  1. 在PHP中编写SOAP接口以获取广告管理代码,并在Python中编写SOAP客户端,然后调用相应的函数。

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

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

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

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

    这可能是最后的选择。这个广告管理代码只是运行和运行,并且没有人为此编写一段代码:)我非常害怕这样做;)

  4. 任何其他想法或提示如何做到这一点?

    感谢。

3 个答案:

答案 0 :(得分:4)

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

例如(使用JQuery):

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

这使您可以使应用程序几乎完全独立于PHP应用程序。

答案 1 :(得分:2)

最佳解决方案是使用服务器端包含。大多数网络服务器都支持这一点。

例如,这是如何在nginx中完成的:

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

然后,您的网络服务器将从您的php后端动态请求,并将其插入到客户端的响应中。没有必要的javascript,而且完全透明。

您还可以使用无边框<iframe>

答案 2 :(得分:0)

我过去通过Apache直接提供PHP部分来完成这项工作。您可以将它们放入媒体文件(/ site_media / php /),或者如果您更喜欢使用更轻量级的媒体服务器(如lighttpd),您可以设置通过apache的另一部分网站启用PHP。

从那里,您可以在模板中使用ajax路径,也可以使用urllib(2)或httplib(2)从视图中加载PHP。更好的是,将urllib2调用包装在templatetag中,然后在模板中调用它。