从Python调用PHP代码

2 投票
3 回答
3264 浏览
提问于 2025-04-15 13:30

我正在尝试将一个旧的PHP广告管理系统整合到一个基于Django的Python网页应用中。PHP和Python的代码都安装在同一台服务器上,通常PHP是通过mod_php5来执行,而Python则是通过mod_wsgi来运行。

现在我想知道,怎样才能在我的Python代码中最有效地调用这个PHP广告管理代码(因为每个页面都需要多次调用这个广告管理代码)?

到目前为止,我想到的解决方案有以下几种:

  1. 在PHP中为广告管理代码写一个SOAP接口,然后在Python中写一个SOAP客户端来调用相应的函数。

    我看到的问题是,这样会大大减慢Python代码的执行速度,因为每个页面都需要在后台进行多次SOAP客户端请求。

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

    这里的问题是,PHP代码使用了Apache环境中的一些变量(比如$_SERVER变量和其他超级全局变量)。我不确定这是否能正确模拟。

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

    这可能是最后的选择。这个广告管理代码一直在运行,而且已经没有人再维护这段代码了 :) 我会很害怕这样做 ;)

有没有其他的想法或建议,看看怎么能做到这一点?

谢谢。

3 个回答

0

我以前是通过Apache直接提供PHP部分的服务。你可以把它们放在你的媒体文件里,比如放在(/site_media/php/)这个文件夹里,或者如果你想用更轻量级的媒体服务器(比如lighttpd),你可以设置网站的另一部分,通过Apache来处理PHP。

接下来,你可以在模板中使用ajax,或者通过urllib(2)或httplib(2)从视图中加载PHP。更好的做法是把urllib2的调用封装成一个模板标签,然后在你的模板中调用它。

2

最好的解决办法是使用服务器端包含。这种方式大多数网络服务器都支持。

比如在nginx中可以这样做:

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

这样,你的网络服务器就会动态地从你的PHP后台请求数据,然后把这些数据插入到发给用户的响应中。这样做不需要用到JavaScript,整个过程对用户来说是完全透明的。

你也可以使用一个没有边框的 <iframe>

4

你觉得用浏览器的AJAX来加载广告怎么样?

比如说(用JQuery):

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

这样做可以让你的应用和PHP应用几乎完全分开。

撰写回答