Как избежать PHP exec() с помощью WSGI для выполнения скрипта Python?

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


person Jon    schedule 04.02.2011    source источник
comment
Есть ли у вас доступ к конфигурации Apache (или к тому веб-серверу, который вы используете)?   -  person MeanEYE    schedule 04.02.2011
comment
Да, у меня есть Apache на моем собственном выделенном сервере.   -  person Jon    schedule 04.02.2011


Ответы (1)


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

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

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

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

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

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

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

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

person ircmaxell    schedule 04.02.2011
comment
К сожалению, я не могу отказаться ни от одного языка, так как использую некоторые библиотеки Python, которых нет в PHP... и переписать весь PHP на Python... Я не уверен, что это стоит усилий. Я надеялся на ярлык с использованием WSGI, чтобы уменьшить эти накладные расходы. - person Jon; 04.02.2011
comment
Большое спасибо за ответ! - person Jon; 04.02.2011