Как выполнить php скрипт, прочитанный из базы данных.

Статус
В этой теме нельзя размещать новые ответы.
Как выполнить php скрипт, прочитанный из базы данных.

Использую php5+mysql5

Что я делаю:
Формирую динамически html-страницу, читая отдельные блоки из базы и вставляя их в основной шаблон вместо конструкции #НАЗВАНИЕ_ШАБЛОНА#, кратко выглядит это так:
PHP:
<html> 
  <body>
     #CONTENT# // вместо этого вставляется код прочитанный из базы
   </body> 
</html>
В базе может храниться так же php-код в виде
PHP:
<?php //код// ?>
и подставляться в шаблон.

В результате получается готовая страница с php вставками, которая хранится в текстовой переменной.

Вывод страницы происходит с помощью команды [m]echo[/m], файл index.php:
PHP:
<?php 
// формирование страницы и запись ее в переменную $page
echo $page;
?>
При такой конструкции вставленный код не выполняется, в браузер не выводится, но присутствует в исходнике, т.е. если из браузера смотреть исходный код, выглядит это так:
PHP:
<html> 
  <body>
     <?php //код// ?> // не выполненный код прочитанный из базы
   </body> 
</html>
Вопрос: Как можно обойти это и заставить код выполниться?

P.S.: Слышал про функцию [m]eval[/m], но никак не могу разобраться в ее работе, этот вопрос обсуждался на каком-то форуме, там привели эту функцию, но ничего больше внятного не было. Буду благодарен подробному ответу, дельному совету.

Заранее спасибо.
 

silent9

Новичок
mixed eval ( string code_str )

code_str - php код без открывающего и закрывающего тэгов
 

Zetruger

ivan.chistyakov.name
>> Слышал про функцию eval

а в чем собственно проблема то? неужели примера из мануала мало для того чтобы понять принцип работы даже с полным отсутствием знание в буржуйской мове?

<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>


ну и потом как сказал zerkms
этим решением вы на корню ломаете всю идею
разделения данных, логики и шаблона
 

Rumatha

Новичок
ты не должен этого хотеть
Присоединяюсь, тем более, обычно стараются снять нагрузку с БД при помощи PHP кода (например, кешированием). А Вы хотите не только данные из БД брать, а еще и код - это неразумное решение.
 
Принцип понятен работы eval вроде понятен - он заменяет код результатом его выполнения в строке, правильно?

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

Причина - в разных модулях код, формирующий контент, - разный, плюс к тому, надо добавить возможность конечному пользователю из админки добавлять свой произвольный php-код.

Используется один основной html-шаблон на весь сайт, куда подставляются блоки в зависимости от модуля.

У меня получилось что-то вроде конструктора, с помощью которого можно описывать абсолютно любую сущность, информация о которой будет храниться в базе, почему бы некоторый функционал для работы с этими сущностями так же не хранить в базе?

Это абсолютно не противоречит отделению кода от дизайна.
 

Фанат

oncle terrible
Команда форума
попробуй почитать про шаблоны.
то, что у тебя "один на весь сайт" - это не шаблон.
 
Автор оригинала: *****
попробуй почитать про шаблоны.
то, что у тебя "один на весь сайт" - это не шаблон.
Почему не шаблон?
А что же это еще тогда?

Ну не одни на весь сайт, можно сделать один на модуль, допустим.
 

Ravanger

Новичок
Вася Лукьянов

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

Справедливости ради скажу, что эта фича использовалась только один раз, уже не помню зачем
 

Rumatha

Новичок
надо добавить возможность конечному пользователю из админки добавлять свой произвольный php-код.
Код добавляют программисты, а не пользователи, иначе получишь такую бомбу!!!
А программист PHP-код пишет в PHP-файлах, а не в БД.
И все-таки почитай по шаблонам и по разделению логики от представления. Суть не в том, что ты генеришь HTML, а в том, что Дизайнер и Программист могут работать Независимо друг от друга (им нужно лишь согласовать названия переменных, структуру приложения и структуру данных).
Посмотри на свой проект: ты можешь отдать свою HTML-разметки переверстать другому человеку - не программисту???
Если нет, - то это не разделение (я конечно утрирую, но суть такова).
 
Автор оригинала: Rumatha
ты можешь отдать свою HTML-разметки переверстать другому человеку - не программисту???
Если нет, - то это не разделение (я конечно утрирую, но суть такова).
Конечно можно отдать переверстать не программисту, ведь будет достаточно вставить переменную, как Вы и говорите, а уж что будет давать эта переменная - дело программиста.

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

К тому же не весь функционал реализован в базе и доступ к функции добавлять свой код будут иметь только пользователи определенной группы.
 
Короче, при использовании eval все заработает вот так?

PHP:
<?php 
// формирование страницы и запись ее в переменную $page
echo eval($page);
?>
Простите, не могу сейчас сам проверить, потому и спрашиваю :(

Active Template Library (ATL) - насколько я помню, это набор классов C++ от Mircosoft. Или я ошибаюсь?
 

HraKK

Мудак
Команда форума
Это вид шаблонов.

Да, заработает - но еще на один мегаговнокод станед больше.
 
Автор оригинала: HraKK
Это вид шаблонов.

Да, заработает - но еще на один мегаговнокод станед больше.
Вы бы аргументировали сначала то, что Вам не нравится, а потом бы бросались словами типа "мегаговнокод".

Можете еще рассказать как Вы сами решаете такую задачу, это будет лучше.
 

Rumatha

Новичок
Да, заработает - но еще на один мегаговнокод станед больше.
И это печально (
Вася Лукьянов не пытайся изобрести гениальный способ супер-мега-кодирования - сделай нормальное разделение логики (хранение данных в БД, шаблоны и код - в файлах).
 

cDLEON

Онанист РНРСlub
А что мешает программисту править запись в базе а не в файле?
Бугага.
Ты ещё и дизайн в базу запихни :)
Оставь только index.php в котором будет туева хуча запросов к базе и пачка евалов :D
 

HraKK

Мудак
Команда форума
Вася Лукьянов
Потому что тебе уже давно все аргиментировали.
1) Хранить код в БД - нельзя.
2) Использовать eval кроме(0.01%) нельзя.
Дальше какие модули у тебя должны быть в шаблоне должен определять контроллер, а не шаблон.
Если же тебе надо сделать какой-то блок с логикой, например последняя новость, делай уже так:
PHP:
<div class=lastest_news>
<?=NewsHelper::getLastNews()?>
</div>
Который уже в свою очередь создат новый view вставит туда данные и подгрузит нужный шаблон для этой сущьности и результат вернет в шаблон.
 
Аргументируйте зачем шаблон обязательно хранить в файле?
Почему нельзя пару строк кода хранить в базе?

И зачем мне клепать кучу файлов типа header.php, footer.php и т.д., а потом обьединять их? Если можно все сделать одним или несколькими (в зависимости от количества модулей например) уже готовыми html-инами, где вместо определенного контента просто вставлены переменные, нужно тебе меню - написал его html-код отдельно, описал быстренько переменную и все заработало.

И какая разница, в базе хранится шаблонили в файле?
 

Ravanger

Новичок
Вася Лукьянов
Скажем так, я бы взял очень много денег с того, кто попросил бы меня поддерживать это гэ
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху