Вставить python/dsl для скриптинга в веб-приложении PHP

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

Я ищу советы о том, как подходить к этой задаче развития?

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

Ответ 1

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

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

В этом также есть несколько приятных примеров:

http://phplua.3uu.de/

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

Ответ 2

Как сделать скрипт на клиенте. Это обеспечит максимальную безопасность, а также сохранит ресурсы сервера.

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Но если какой-то очевидный DSL может быть спроектирован для вашего домена, это может быть более легкое решение.

Ответ 5

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

Ответ 6

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

  • Сделайте свою логику в PHP на интерфейсе с помощью MVC
  • Отложите свою логику на бэкэнд

Если вы делаете свою логику в интерфейсе, вы можете посмотреть в PHP5 MVC framework, например Zend

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