Парсинг текстового поля из базы данных и выполнение произвольной функции

Статус
В этой теме нельзя размещать новые ответы.

Girt

Постоялец
Регистрация
11 Фев 2012
Сообщения
86
Реакции
63
Здравствуйте. Помогите решить проблему.

Необходимо в базе (text field) хранить некую динамическую информацию, получаемую путём вызова функции с
параметрами, вместе со статическим текстом.
Единственное что пришло в голову - это использовать какой нибудь легковесный шаблонизатор с возможностью вызова функций, а также возможности ограничить список используемых функций. Например пишем {{funcname(params)}} и шаблонизатор это выполняет и вставляет ответ.
Пересмотрел кучу шаблонизаторов но подходящего не нашёл.
Про eval думал, но с точки зрения безопасности не подходит.

UPD:
Shortcode из Wordpress самое то, возьму на заметку.
Благодарствую.
 
Последнее редактирование модератором:
сериализовать класс или сами данные можно.
результат сериализовал, base64 и в поле, нужно достал распаковал загрузил в тоже место где взял, и состояние данных и функций в том же виде как и было.
 
call-user-func-array - Для просмотра ссылки Войди или Зарегистрируйся

Параметры вызова функции и передаваемые в функцию - обычные массивы, просто сделай serialize или json_encode перед записью в БД
 
Ecли бы хранился только вызов функции, проблем нет.
Вся загвоздка, что этот вызов находится внутри текста:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt {{func1name(params1)}} ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur {{func2name(params2)}}. Excepteur sint occaecat {{func3name(params3)}} cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Т.е. нужно парсить на предмет наличия этих вызовов и заменять их тем, что вернет функция (похоже на работу шаблонизатора).
P.S. как записывать функцию с параметрами не принципиально, просто здесь написал так для понимания.
 
Вообще говоря - проблемы то и не вижу особо. Вы видимо не сознательно уже сделали всё верно - ищем {{ последовательность этих символов в обычных текстах почти не встречается, поэтому вероятность ошибки стремиться к нулю.
Далее берем всё что между {{ и }}. Это и будет значение имя вашей функции.
Примерно то же самое использует Wordpress Для просмотра ссылки Войди или Зарегистрируйся
Так же вы можете использовать не сами названия функций с параметрами, а некие переменные, знаете, как обычно делают при рассылках - всякие %username% в тело письма, ищем теперь переменную $username, а уже $username = user_func($a,$b,$c);
 
  • Нравится
Реакции: Girt
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху