Замена текстовой строки на значение функции php

kil

Новичок
Замена текстовой строки на значение функции php

Пишу небольшую cms для сайта.
Строится она следующим образом:
есть файл functions.php, в котором есть различные функции для страниц, например функция вывода календаря, вывода формы для голосования, вывода последних заголовков новостей и т.д.
Пользователь при настройке сайта редактирует в textarea код дли страницы типа:
PHP:
<html>

...

<body>
<table>
<tr>
<td>

...

</td>
<td>
## calendar ##
</td>
</tr>
</table>

...

</body>
</html>
Потом этот код страницы записывается в БД.
При выводе страницы этот код надо обработать.
Так вот в чем вопрос: мне надо написанное пользователем указание на вставку какой-нибудь функции, в данном случае, ## calendar ## заменить на значение функции calendar(), которая хранится в файле funcrions.php и потом все это вывести..
В принципе можно изначально получить значение всех функций из файла functions, а потом заменить реплейсом в коде ## ??? ## на значение нужных функций, но это имхо не оч хорошо т.к. функций довольно много и кроме того некоторые имеют параметры типа news(n), (n-кол-во новостей) и т.п.
Как это по-человечески сделать??? :confused:

Извиняюсь если что неправильно написал.
Заранее спасибо! :)
 

kil

Новичок
как??
получается что мне надо в html коде заменить "## calendar ##" не на "calendar()", а на ЗНАЧЕНИЕ calendar()!
 

denver

?>Скриптер
Ага, ну немножео посложнее тогда. Заменяешь ## calendar ## на <?=calendar()?> а потом нужной переменной делаешь eval всего. Только eval как параметр принимает уже сам php. Поэтому делать нужно eval("?>$template<?");

-~{}~ 18.06.06 18:34:

только не понятно почему бы не делать так как это задыумывалось с самого начала... Почему бы не записывать в базу:
PHP:
<html> 

... 

<td> 
<?=calendar()?>
</td> 

...

</html>
стоит ли изобретать новый синтаксис а потом его парсить
 

kil

Новичок
Блин! не сообразил :)))))) Спасибо большое!!!!!!!!!!!!

// closed
 

HraKK

Мудак
Команда форума
eval не лучшый выбор.
Дыр будет хоть отбавляй, подумай над другой структурой.
 

phprus

Moderator
Команда форума
kil
Можно использовать preg_replace_callback. В функции обратного вызова проверяй значение заменяемого параметра(строки) и в зависимости от него вызывай нужную функцию.
 

kil

Новичок
Автор оригинала: denver
банально если юзер вставит exec("rm -f *")... Запрещать exec бессмыслнно т.к. можно и другой сотней способов сделать каку.
Интересно, а зачем юзеру что-то вставлять и портить собственный сайт? :)
 

denver

?>Скриптер
ты мне дай ссылочку потом, я покажу как это может делать гость ;)
ЗЫ. Только не плакай потом :)
 

kil

Новичок
Автор оригинала: denver
ты мне дай ссылочку потом, я покажу как это может делать гость ;)
Если честно, я не могу понять, что гость может сделать.... Функции, которые используюет юзер, записаны. Никакую другую функцию вызвать не получится... GET и POST переменные я проверяю.... :)
 
Сверху