Как избежать PHP exec () с помощью WSGI для выполнения скрипта Python? - PullRequest
3 голосов
/ 04 февраля 2011

Прямо сейчас я запускаю скрипт Python из PHP, используя exec (), поскольку мне нужно передать некоторые динамические переменные с веб-сайта / MySQL в командную строку. Однако я хотел бы улучшить как скорость, так и безопасность этой операции, поэтому я подумал об использовании WSGI. Я думал, что можно было бы встроить скрипт Python в файл WSGI, который будет использовать переменные, передаваемые прямо (или косвенно) из PHP ... но как я могу это сделать? Я никогда не использовал WSGI, поэтому я даже не знаю, глупый это вопрос или нет:)

1 Ответ

1 голос
/ 04 февраля 2011

Прежде всего, вы можете сделать все это на Python или PHP? Использование нескольких языков обычно рассматривается как анти-шаблон. Это не значит, что это всегда плохая идея, но сначала вы должны спросить, почему, и только потом, если вы уверены, что это хорошая идея, двигаться вперед.

Что касается специфики того, что вы хотите сделать, есть несколько вариантов:

  1. Если вы используете Apache, вы можете использовать функцию virtual() для выдачи нового запроса через Apache.

    Предполагается, что вы используете mod_php и mod_wsgi. По сути, вы должны создать строку запроса для переменных, которые хотите передать, и вызвать ее следующим образом:

    virtual('path/to/python.py?'.$query);
    
  2. Напишите свой собственный шлюз PHP WSGI.

    По сути, кодируйте спецификацию WSGI в библиотеку и вызывайте ее явно из PHP.

  3. Придерживайтесь звонить с exec() (который, вероятно, будет лучшим вариантом на данный момент).

То, что вы должны учитывать, заключается в том, что накладные расходы присущи перекрестному включению между языками. Вы никогда этого не преодолеете, это просто природа зверя. Поэтому вместо этого я бы предложил хранить весь запрос внутри одной среды и полностью обрабатывать его в этой среде ...

...