Встроить Python / DSL для сценариев в веб-приложении PHP - PullRequest
11 голосов
/ 23 сентября 2011

Я занимаюсь разработкой веб-приложения, написанного на PHP5, который в основном представляет собой пользовательский интерфейс поверх базы данных.Чтобы предоставить пользователям более гибкий инструмент, я хочу встроить язык сценариев, чтобы они могли выполнять более сложные операции, такие как запуск SQL-запросов, циклы, хранение данных в переменных и т.В моем бизнес-домене Python широко используется для написания сценариев, но я также думаю о создании простого предметно-ориентированного языка.Скрипт должен обернуть мои существующие классы PHP.

Я ищу совет, как подойти к этой задаче разработки?

Обновление: я попробую сценарии в базе данных, используя PLPGSQL в PostgreSQL.Это пока подойдет, но я не могу использовать мои классы PHP таким образом.Подход Lua привлекателен и кажется тем, чего я хочу (кроме его не Python).

Ответы [ 6 ]

3 голосов
/ 05 октября 2011

Как насчет выполнения сценариев на клиенте.Это обеспечит максимальную безопасность и сэкономит ресурсы сервера.

Другими словами, Javascript станет вашей платформой сценариев.Что вы делаете, так это выставляете функциональность вашего бэкенда как функции javascript.В зависимости от того, как в настоящее время написано ваше приложение, для этого может потребоваться работа с сервером или нет.

Да, и, кстати, вы не ограничены JavaScript для реального языка.Google "скомпилировать в javascript" и первым попаданием должен быть список языков, которые вы можете использовать.

2 голосов
/ 05 октября 2011

Если вы не связаны с Python, вы можете использовать, например, Lua в качестве языка сценариев.Lua - очень легкий язык, легкий в освоении и разработанный с учетом встраивания.Уже есть как минимум два доступных расширения PHP, которые прекрасно встраивают Lua в PHP и, следовательно, предоставляют возможность разрешить доступ между частью PHP и Lua вашего приложения.Посмотрите на:

http://pecl.php.net/package/lua

У этого также есть несколько хороших примеров:

http://phplua.3uu.de/

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

1 голос
/ 06 октября 2011

Я не знаю никаких готовых решений.Но pypy , реализация Python, написанная на RPython, имеет функцию sandboxing , которая позволяет запускать недоверенный код.для вашего домена это может быть более простым решением.

1 голос
/ 03 октября 2011

Безопасность, охрана, безопасность!Просто хотел убрать это с дороги.То, что вы пытаетесь сделать, звучит довольно страшно, но стрелять - ваша нога.

Кроме того, вы пытаетесь смешать два разных серверных языка, если не существует реализации Python.который работает поверх PHP, о котором я не знаю (PHPython?).

Если вы хотите, чтобы ваш PHP-код вызывал Python каким-либо образом, вы должны быть в состоянии сделать это довольно легко с чем-то вродеeval () или exec ().См. , как вводить код Python во время выполнения и выполнять его?

Что касается упаковки ваших классов PHP, я не уверен, что вы можете сделать это точно.Вы можете отразить ваши классы PHP с помощью классов Python и использовать что-то вроде JSON для передачи данных между ними.

0 голосов
/ 03 октября 2011

У вас есть два варианта:

  1. Выполните свою логику в PHP на внешнем интерфейсе, используя MVC
  2. Отложите свою логику до бэкэнда

ЕслиВы делаете свою логику на внешнем интерфейсе, вы можете заглянуть в среду PHP5 MVC, такую ​​как Zend

Если вы откладываете свою логику, вы можете использовать любой язык сценариев, который вам нравится,Например, вы можете использовать SQLAlchemy с Python для доступа к вашей базе данных.

0 голосов
/ 30 сентября 2011

Вы можете сделать это без Python, т.е. парсинг пользовательского ввода для предопределенных «тегов» и возврат результата.

...