2009-08-10 24 views
2

私は古いPHP広告管理システムを(Django)PythonベースのWebアプリケーションに統合しようとしています。 PHPとPythonのコードはどちらも同じホストにインストールされていますが、PHPはmod_php5で、Pythonはmod_wsgiで実行されます。PythonからPHPコードを呼び出す

今、このPHP広告管理コードをPythonコードから最も効率的に呼び出すにはどうすればよいでしょうか(広告管理コードはページごとに複数回呼び出される必要があります)。

私はこれまでのところ、以下の通りです思い付いたソリューション:広告管理コードのためのPHPで

  1. 書き込みSOAPインタフェースし、適切な関数を呼び出すPythonでSOAPクライアントを作成。

    私が見ている問題は、Pythonコードの実行がかなり遅くなることです。なぜなら、各ページが提供されるたびに複数のSOAPクライアント要求がバックグラウンドで必要になるからです。

  2. PHPコマンドラインインターフェイスを使用してos.execvp()またはsubprocess.Popen()でPHPコードを呼び出します。

    ここでの問題は、PHPコードがApache環境($ _SERVER varsやその他のスーパーグローバル)を利用することです。これを正しくシミュレートできるかどうかはわかりません。

  3. Pythonで広告管理コードを書き換えます。

    おそらくこれが最後の手段になります。この広告管理コードだけで実行され、実行され、このためにコードの一部を書いた残りの誰もありません:)私はこれを行うのは非常に恐れてはと思います。)

他のアイデアやヒントをどのようにこのできますか?

ありがとうございました。

+1

義務:すべてのためにPythonを使用し、PythonのPHP部分を書き直してください。 – nosklo

+0

あなたは正しいです、それは3番目のオプションですが、それは_huge_タスクになると私は思います。 – Haes

答えて

4

ブラウザからAJAXを使用して広告を読み込むのはどうですか?例えば

は(jQueryのを使用して):

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

これはあなたがPHPアプリからアプリをほぼ完全に独立し、あなたを維持することができます。

+1

興味深い解決策、私はそれを考えなかった。もちろん、Javascriptが無効になっている場合は動作しませんので、これが必須かどうかを確認する必要があります。 – Haes

+0

また、Pythonから直接PHPアプリケーションにリクエストすることもできます。 urllib2を試してください:http://docs.python.org/library/urllib2.html – Mark

2

ベストソリューションは、サーバーサイドインクルードを使用することです。ほとんどのウェブサーバーがこれをサポートしています。

例えばこれはnginxの中で行われるだろうかです:

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

あなたのウェブサーバは、動的にPHPのバックエンドから要求し、クライアントに行く応答に挿入します。 JavaScriptは必要なく、完全に透明です。

また、使用することができ、私は、Apache経由で直接PHPの部分を提供することによって、過去にこれをやったボーダレス

+0

iframeの使用は間違いなく推奨されていません –

0

。あなたのメディアファイル(/ site_media/php /)でそれらを入れることもできますし、(lighttpdのように)メディアサーバーに軽量なものを使いたい場合は、サイトの別の部分を設定して、 PHPを有効にしました。

そこからテンプレートでajaxルートを取るか、urllib(2)またはhttplib(2)を使用してビューからPHPを読み込むことができます。さらに良い方法は、urllib2呼び出しをtemplatetagでラップし、それをテンプレートで呼び出すことです。

関連する問題