Изменение структуры сайта [PHP]

Discussion in 'PHP' started by daniel777, 31 Mar 2012.

  1. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Пишу 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>

    Прошу помочь советом, как можно поступить в такой ситуации.
     
    #1 daniel777, 31 Mar 2012
    Last edited: 31 Mar 2012
  2. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    аналогичные действия как и с <code> только результат eval() либо preg_replace с модификатором "e" либо как в других двигах бб-код [ph*p]...[/p*hp]
     
    _________________________
    2 people like this.
  3. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Вот написал такой код:
    PHP:
    <?php

    function highlight($str){
    $lines explode("\n"$str);
    $code.='<fieldset><ol>';
    foreach(
    $lines as $l){
    $code.='<li>'.highlight_string($ltrue).'</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($chighlight($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>