从Python调用PHP代码

从Python调用PHP代码,php,python,Php,Python,我正在尝试将一个旧的PHP广告管理系统集成到一个基于(Django)Python的web应用程序中。PHP和Python代码都安装在相同的主机上,PHP通常由mod_php5和Python通过mod_wsgi执行 现在我想知道从Python代码中以最有效的方式调用PHP广告管理代码的最佳方式是什么(广告管理代码必须为每个页面调用多次) 到目前为止,我提出的解决方案如下: 用PHP编写广告管理代码的SOAP接口,用Python编写SOAP客户端,然后调用相应的函数 我看到的问题是,这将大大降低Py

我正在尝试将一个旧的PHP广告管理系统集成到一个基于(Django)Python的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环境($\u服务器变量和其他超全局变量)。我不确定这是否可以正确模拟

  • 用Python重写广告管理代码

    这可能是最后的手段。这个广告管理代码一直在运行,没有人为它编写代码:)我很害怕这样做;)

  • 还有其他的想法或提示吗


    谢谢。

    从浏览器中使用AJAX加载广告怎么样

    例如(使用JQuery):


    这允许您将应用程序与PHP应用程序几乎完全分离。

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

    例如,在nginx中是这样做的:

    <!--# include virtual="http://localhost:8080/phpapp/getads.php" -->
    
    
    
    然后,Web服务器将从php后端动态请求,并将其插入到发送到客户端的响应中。不需要javascript,而且完全透明


    您还可以使用无边界的

    我以前通过Apache直接为PHP部分提供服务来实现这一点。您可以将它们与您的媒体文件一起放入(/site_media/php/),或者如果您更喜欢为您的媒体服务器使用更轻量级的东西(如lighttpd),您可以设置站点的另一部分,该部分通过启用php的apache


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

    强制性:使用python进行所有操作,在python中重写PHP部分你是对的,这将是第三个选项,但我认为这将是一项艰巨的任务。有趣的解决方案,我没有想到。当然,如果禁用Javascript,这将不起作用,因此我需要检查这是否是一项要求。尝试urllib2:绝对不建议使用iframe
    <!--# include virtual="http://localhost:8080/phpapp/getads.php" -->