我正在尝试将旧的PHP广告管理系统集成到基于Python的(Django)Web应用程序中。 PHP和Python代码都安装在同一主机上,PHP由mod_php5
执行,Python通过mod_wsgi
执行。
现在我想知道从我的Python代码中以最有效的方式调用这个PHP广告管理代码的最佳方法是什么(每个页面必须多次调用广告管理代码)?
到目前为止我提出的解决方案如下:
在PHP中编写SOAP接口以获取广告管理代码,并在Python中编写SOAP客户端,然后调用相应的函数。
我看到的问题是,这将大大减慢Python代码的执行速度,因为对于每个服务的页面,后台需要多个SOAP客户端请求。
使用PHP命令行界面通过os.execvp()或subprocess.Popen()调用PHP代码。
这里的问题是PHP代码使用了Apache环境($ _SERVER vars和其他超级全局)。我不确定这是否可以正确模拟。
用Python重写广告管理代码。
这可能是最后的选择。这个广告管理代码只是运行和运行,并且没有人为此编写一段代码:)我非常害怕这样做;)
任何其他想法或提示如何做到这一点?
感谢。
答案 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中,然后在模板中调用它。