-
В базе у меня имеется контент, который я успешно могу вывести с помошью echo, а если в этот контент написать что-нибуть на РНР, то он его не обрабатывает. Можно ли сделать так, чтобы выводился контент, но при этом и выполнялся код, который там написан?
-
Может быть выдирать куски PHP-кода и запускать их eval'ом?
-
Код:
<?
$TextWithCode='<html><title>Main</title><body><?php global $j;echo "Hello";$j=2;?><hr><? global $j;echo "\$j=".$j;?></body></html>';
function Replacement($Matches)
{
****global $Functions;
****$Num=count($Matches);
****if($Num>1) for($i=1;$i<$Num;$i++) if(($Matches[$i]!="<?")&&($Matches[$i]!="<?php")) $Functions[]=create_function('',$Matches[$i]);
****return "<??>";
}
$Functions=array();
$Content=array();
$TextWithCode=preg_replace_callback('/(<\?php|<\?)(.*)\?>/sU',"Replacement",$TextWithCode);
$Content=explode("<??>",$TextWithCode);
$Num=count($Functions)>count($Content)?count($Functions):count($Content);
for($i=0;$i<$Num;$i++)
{
****if(isset($Content[$i])) echo $Content[$i];
****if(isset($Functions[$i])) echo $Functions[$i]();
}
?>
Примерно вот так [Only registered and activated users can see links. Click Here To Register...] Только если хотите использовать значение переменной в разных кусках - объявляйте ее global.
Если сделать вот так:
Код:
$TextWithCode='<html><title>Main</title><body><?php echo "Hello";$j=2;?><hr><? echo "\$j=".$j;?></body></html>';
то во втором фрагменте будет ошибка, поскольку $j в первой части локальная и во второй функции не будет видна. Открывающий тэг для php кода может быть как '<?' так и '<?php', разницы нет...
Если есть вопросы - буду рад ответить )
-
большое спасибо. Сейчас буду испытывать и применять к своим нуждам.
-
Я бы робко заметил, что такая политика в разработке губительна. В сети полно по этому поводу написано, но все же если ты хочешь свой сайт на базе данного скрипта раскручивать, то лучше отделяй мух от котлет. В смысле код от представления.
-
Я пошел по другому пути, который для меня оказался даже более удобным