Пишу CMS на текстовых файлах. Все страницы лежат по такому пути: data/pages/NAME/, где NAME - название страницы. В директории NAME лежит файл text.txt, в котором находится содержимое страницы. Страницa формируется так: PHP: $content.=file_get_contents('data/pages/NAME/text.txt); Дальше происходит проверка на наличие тега <code>, при нахождении которого содержимое обрабатывается функцией highlight(). PHP: if(preg_match("#<code>(.*?)<\/code>#", $content, $code)){ $content=str_replace($code[1], highlight($code[1]), $content); } И в конце скрипта идет вывод $content на страницу: PHP: echo $content; Нужно дописать возможность добавления php кода в такую страницу, так чтобы он мог успешно выполнятся. Пример содержания файла text.txt: Code: Какой-то текст <?php echo 'ok'; //должен выполнится ?> Еще какой-то текст <code><?php echo 'okay'; //Должен быть выведен как текст, и обработан функцией highlight() ?></code> И еще какойто текст. Мною был рассмотрен вариант использования функции include(), но: 1)Тогда код будет выведен не в нужном мне месте. 2)Не будет игнорироватся код, который поместили внутрь тега <code> Прошу помочь советом, как можно поступить в такой ситуации.
аналогичные действия как и с <code> только результат eval() либо preg_replace с модификатором "e" либо как в других двигах бб-код [ph*p]...[/p*hp]
Вот написал такой код: PHP: <?php function highlight($str){ $lines = explode("\n", $str); $code.='<fieldset><ol>'; foreach($lines as $l){ $code.='<li>'.highlight_string($l, true).'</li>'; } $code.='</ol></fieldset>'; return $code; } $content=file_get_contents('text.txt'); if(preg_match_all("/<code>(.*?)<\/code>/s", $content, $code)){ foreach($code[1] as $c){ $content=str_replace($c, highlight($c), $content); } } if(preg_match_all("/<php>(.*?)<\/php>/s", $content, $php)){ foreach($php[1] as $p){ $content=str_replace($p, eval($p), $content); } } echo $content; ?> Файл text.txt(с которым я тестировал скрипт): Code: ################################# <code><?php echo "ok"; ?></code> ################################# <code><?php echo "okay"; ?></code> ################################# <php> $a = 4*9; echo $a; </php> ################################# <php> $content.=date('d'); </php> ################################# <code> <?php echo 'ok'; ?> </code> У меня возникло несколько вопросов: 1)Правилен и безопасен ли этот код? 2)Как правильно добавить проверку на пустой тег? а)Выдает ошибку: <code> </code> б)Работает правильно: <code></code> в)Показывает первую и последнюю строчки лишними: <code> <?php echo 'ok'; ?> </code>