2009-08-10 92 views
2

我正在嘗試將一箇舊的PHP廣告管理系統集成到一個基於Python的Web應用程序(Django)中。 PHP和Python代碼都安裝在相同的主機上,PHP通常由mod_php5和Python通過mod_wsgi執行。從Python調用PHP代碼

現在我想知道從我的Python代碼中以最有效的方式調用此PHP廣告管理代碼的最佳方式是什麼(必須爲每個頁面多次調用廣告管理代碼)?

的解決方案,我想出了到目前爲止,有以下幾種:在PHP中的廣告管理代碼

  1. 寫SOAP接口,並用Python語言編寫一個SOAP客戶端,然後調用相應的功能。

    我看到的問題是,這會顯着減慢Python代碼的執行速度,因爲對於每個服務頁面而言,後臺都需要多個SOAP客戶端請求。

  2. 使用PHP命令行界面通過os.execvp()或subprocess.Popen()調用PHP代碼。

    這裏的問題是PHP代碼使用Apache環境($ _SERVER vars和其他超全局變量)。我不確定這是否可以正確模擬。

  3. 用Python重寫廣告管理代碼。

    這可能是最後的手段。這則廣告管理代碼只是運行和運行,並沒有一個剩下的是誰寫的一段代碼這個:)我會頗爲忌憚做到這一點;)

任何其他的想法或提示如何可以做到?

謝謝。

+1

強制性:使用python做所有事情,在python – nosklo 2009-08-10 13:50:27

+0

中重寫PHP部分你是對的,那將是第三種選擇,但這將是一個_huge_任務,我想。 – Haes 2009-08-10 14:20:45

回答

4

如何使用瀏覽器中的AJAX加載廣告?

例如(使用JQuery):

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

這可以讓你保持你的應用程序幾乎完全從PHP應用程序分開。

+1

有趣的解決方案,我沒有想到這一點。當然,如果Javascript被禁用,這將不起作用,所以我需要檢查這是否是需求。 – Haes 2009-08-10 14:18:41

+0

或者,您可以直接從Python向php應用程序發出請求。嘗試urllib2:http://docs.python.org/library/urllib2.html – Mark 2009-08-10 15:12:21

2

最好的解決方案是使用服務器端包括。大多數Web服務器都支持這一點。

例如這是怎麼會在nginx的完成:

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

你的Web服務器,然後將動態地從你的PHP後臺請求,並將其插入到該進入客戶端的響應。沒有必要的JavaScript,並且完全透明。

你也可以使用一個無國界的

+0

絕對不推薦使用iframe – 2009-08-10 22:08:19

0

我已經通過Apache直接服務於PHP部分做到了這一點,在過去。您可以將它們放入媒體文件(/ site_media/php /)中,或者如果您希望爲媒體服務器使用更輕量級的設備(如lighttpd),則可以通過apache設置另一部分站點已啓用PHP。從那裏,你可以在你的模板中使用ajax路由,或者你可以使用urllib(2)或httplib(2)從你的視圖中加載PHP。更好的是,將urllib2調用包裝在模板標籤中,然後在模板中調用它。