Вызовите код PHP из Python - PullRequest
       30

Вызовите код PHP из Python

2 голосов
/ 10 августа 2009

Я пытаюсь интегрировать старую систему управления рекламой PHP в (Django) веб-приложение на Python. PHP и код Python устанавливаются на одних и тех же хостах, PHP выполняется mod_php5, а Python - mod_wsgi, обычно.

Теперь мне интересно, как лучше всего назвать этот код управления рекламой PHP из моего кода Python наиболее эффективным способом (код управления рекламой должен вызываться несколько раз для каждой страницы)?

Решения, которые я придумал, следующие:

  1. Написать SOAP-интерфейс на PHP для кода управления рекламой и написать SOAP-клиент на Python, который затем вызывает соответствующие функции.

    Проблема, которую я вижу, заключается в том, что это значительно замедлит выполнение кода Python, поскольку для каждой обслуживаемой страницы в фоновом режиме необходимо несколько клиентских запросов SOAP.

  2. Вызовите код PHP через os.execvp () или subprocess.Popen () с использованием интерфейса командной строки PHP.

    Проблема здесь в том, что код PHP использует среду Apache ($ _SERVER vars и другие суперглобалы). Я не уверен, что это можно смоделировать правильно.

  3. Переписать код управления рекламой в Python.

    Это, вероятно, будет последним средством. Этот код управления рекламой просто запускается и работает, и не осталось никого, кто бы написал для этого кусок кода :) Я бы очень боялся это сделать;)

Любые другие идеи или советы, как это можно сделать?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 августа 2009

Как насчет использования AJAX из браузера для загрузки рекламы?

Например (с использованием JQuery):

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

Это позволяет вам практически полностью отделить ваше приложение от приложения PHP.

2 голосов
/ 10 августа 2009

Лучшим решением является использование серверных включений. Большинство веб-серверов поддерживают это.

Например, вот как это будет сделано в nginx:

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

Ваш веб-сервер будет затем динамически запрашивать у вашего php-сервера и вставлять его в ответ, отправляемый клиенту. Нет необходимости в JavaScript и полностью прозрачен.

Вы также можете использовать без полей <iframe>

0 голосов
/ 10 августа 2009

Я делал это в прошлом, обслуживая части PHP напрямую через Apache. Вы можете добавить их в свои медиа-файлы (/ site_media / php /) или, если вы предпочитаете использовать что-то более легкое для своего медиа-сервера (например, lighttpd), вы можете настроить другую часть сайта, которая проходит через apache с PHP включен.

Оттуда вы можете выбрать маршрут Ajax в своих шаблонах или загрузить PHP из ваших представлений, используя urllib (2) или httplib (2). Еще лучше, оберните вызов urllib2 в тег шаблона и назовите его в своих шаблонах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...