从Python调用PHP代码
我正在尝试将一个旧的PHP广告管理系统整合到一个基于Django的Python网页应用中。PHP和Python的代码都安装在同一台服务器上,通常PHP是通过mod_php5
来执行,而Python则是通过mod_wsgi
来运行。
现在我想知道,怎样才能在我的Python代码中最有效地调用这个PHP广告管理代码(因为每个页面都需要多次调用这个广告管理代码)?
到目前为止,我想到的解决方案有以下几种:
在PHP中为广告管理代码写一个SOAP接口,然后在Python中写一个SOAP客户端来调用相应的函数。
我看到的问题是,这样会大大减慢Python代码的执行速度,因为每个页面都需要在后台进行多次SOAP客户端请求。
通过os.execvp()或subprocess.Popen()使用PHP命令行接口来调用PHP代码。
这里的问题是,PHP代码使用了Apache环境中的一些变量(比如$_SERVER变量和其他超级全局变量)。我不确定这是否能正确模拟。
将广告管理代码重写为Python代码。
这可能是最后的选择。这个广告管理代码一直在运行,而且已经没有人再维护这段代码了 :) 我会很害怕这样做 ;)
有没有其他的想法或建议,看看怎么能做到这一点?
谢谢。
3 个回答
我以前是通过Apache直接提供PHP部分的服务。你可以把它们放在你的媒体文件里,比如放在(/site_media/php/)这个文件夹里,或者如果你想用更轻量级的媒体服务器(比如lighttpd),你可以设置网站的另一部分,通过Apache来处理PHP。
接下来,你可以在模板中使用ajax,或者通过urllib(2)或httplib(2)从视图中加载PHP。更好的做法是把urllib2的调用封装成一个模板标签,然后在你的模板中调用它。
最好的解决办法是使用服务器端包含。这种方式大多数网络服务器都支持。
比如在nginx中可以这样做:
<!--# include virtual="http://localhost:8080/phpapp/getads.php" -->
这样,你的网络服务器就会动态地从你的PHP后台请求数据,然后把这些数据插入到发给用户的响应中。这样做不需要用到JavaScript,整个过程对用户来说是完全透明的。
你也可以使用一个没有边框的 <iframe>
。
你觉得用浏览器的AJAX来加载广告怎么样?
比如说(用JQuery):
$(document).ready(function() { $("#apageelement").load("/phpapp/getads.php"); })
这样做可以让你的应用和PHP应用几乎完全分开。