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

Тема в разделе "PHP", создана пользователем Girt, 8 авг 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Girt

    Girt Постоялец

    Регистр.:
    11 фев 2012
    Сообщения:
    87
    Симпатии:
    62
    Здравствуйте. Помогите решить проблему.

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

    UPD:
    Shortcode из Wordpress самое то, возьму на заметку.
    Благодарствую.
     
    Последнее редактирование модератором: 11 авг 2014
  2. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    сериализовать класс или сами данные можно.
    результат сериализовал, base64 и в поле, нужно достал распаковал загрузил в тоже место где взял, и состояние данных и функций в том же виде как и было.
     
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.403
    Симпатии:
    1.183
    call-user-func-array - http://php.net//manual/ru/function.call-user-func-array.php

    Параметры вызова функции и передаваемые в функцию - обычные массивы, просто сделай serialize или json_encode перед записью в БД
     
  4. Girt

    Girt Постоялец

    Регистр.:
    11 фев 2012
    Сообщения:
    87
    Симпатии:
    62
    Ecли бы хранился только вызов функции, проблем нет.
    Вся загвоздка, что этот вызов находится внутри текста:
    Т.е. нужно парсить на предмет наличия этих вызовов и заменять их тем, что вернет функция (похоже на работу шаблонизатора).
    P.S. как записывать функцию с параметрами не принципиально, просто здесь написал так для понимания.
     
  5. DonPrus

    DonPrus Писатель

    Регистр.:
    28 июл 2014
    Сообщения:
    9
    Симпатии:
    12
    Вообще говоря - проблемы то и не вижу особо. Вы видимо не сознательно уже сделали всё верно - ищем {{ последовательность этих символов в обычных текстах почти не встречается, поэтому вероятность ошибки стремиться к нулю.
    Далее берем всё что между {{ и }}. Это и будет значение имя вашей функции.
    Примерно то же самое использует Wordpress http://codex.wordpress.org/ru:Shortcode_API
    Так же вы можете использовать не сами названия функций с параметрами, а некие переменные, знаете, как обычно делают при рассылках - всякие %username% в тело письма, ищем теперь переменную $username, а уже $username = user_func($a,$b,$c);
     
    Girt нравится это.
Статус темы:
Закрыта.