Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиКодингПишем защищенный движок
© Cobalt 09.11.2006 статья не оптимизирована

Скачать файлы к статье

 Для начала поставим задачу. Цель - написание "неломаемого движка". В принципе
нет неломаемых вещей, но мы можем постараться максимально затруднить взломщику
его работу. Как известно нельзя сломать только то чего нет. Мы постараемся
приблизится к этому идеалу. Т.е. по суте на нашем сайте не будет ни какого
движка. Один голый и статический HTML +). Предвидя твое возмущение могу сказать
что на самом деле движек будет. Со всеми новомодными фичами которые ты туда
захочешь впихнуть. Я тебя еще не запутал? Как это будет движок, и втоже время
его не будет?

 Все очень просто. Мы с тобой напишем движок который будет генерить на сайт
статические хтмл страницы. Т.е. посетителям сайта будут доступны только они.
В специальной, запароленой части сайта будет находится вся логика реализованая
на php. Выиграем мы при этом многое. Например статичные страницы грузятся
значительно быстрее чем сгенеренные скриптами. Во вторых, для не посвещенного
юзера на нашем сайте вообще нет никаких скриптов, а значит значительно усложняется
процесс нахождения в них дырок =).

 Объем статьи не позволяет превести полный мануал по созданию движка, по этому
я ограничусь лишь основной идеей и непосредственно шаблонизатором. Сам
шаблонизатор представляет собой класс которому при создании передается шаблон.
Причем шаблон можно передать как ввиде строки так и ввиде файла. После того
как твой генератор сгенерирует нужные для страницы значения, он сопоставит
их с шаблоном и запустит шаблонизатор. Тот в свою очередь, в зависимости от
настроек либо выдаст результат на экран, либо вернет ввиде строки.

 Чтобы тебе стало окончательно ясно привиду пример. Допустим у тебя есть
два шаблона один /home/site/template/test.tpl:

        <html>
        <head>
                <title><#TITLE#></title>
        </head>
        <body>
            <table>
                <#FOREACH array="k" value="v" #>
                      <tr>
                        <td>
                         <#v.a#>
                        </td>
                        <td>
                         =
                        </td>
                        <td>
                         <#v.b#>
                        </td>
                      </tr>
                <#ENDFOREACH#>
            </table>
            <table>
                <#TABLE2#>
            </table>
        </body>
        </html>
        
 и второй /home/site/template/str.tpl:
 
                      <tr>
                        <td>
                         <#X#>
                        </td>
                        <td>
                         =
                        </td>
                        <td>
                         <#Y#>
                        </td>
                      </tr>
        
 Заметь, что шаблонизатор потдерживает циклы, а также и ветвления.
Создаем скриптик такого рода

        <?php
        include_once("путь_к_нашему_шаблонизатору");

        #  Создаем экземпляр класса
        $TPL=new CTPL("/home/site/template/test.tpl");
        
        # теперь создадим столько экземпляров шаблона str.tpl сколько у нас
        # должно быть строк во второй табице
        $T=array();
        for($i=0; $i<=100; $i++){
            $T[$i]=new CTPL("/home/site/template/str.tpl");
            $T[$i]->assign(array("X"=>"I", "Y"=>$i));
        }
        
        # Ассоциируем переменные
        $TPL->assign(array("TITLE"      =>      "Тестируем мой шаблонизатор",
                           "k"          =>      array(array("a"=>"a","b"=>1),
                                                      array("a"=>"b","b"=>2),
                                                      array("a"=>"c","b"=>3)),
                           "TABLE2"     =>         $T
                           )
                      );
        # Запускаем на выполнение
        echo($TPL->get());
        # или $TPL->run();
        ?>
        
 Как видишь, в этих двуз примерах приводятся два разных способа заполнения
строк в таблице. Данные могут быть взяты откуда угодно. Например из тойже БД.
Тем самым нет смысла каждый раз выбирать из базы данные особенно если они там
не такуж часто меняются. Достаточно после внесения изменений в БД, нажать
кнопочку "Сгенерировать" которая по готовым шаблонам создаст статичные HTML
документы на сайте.

 Сам класс шаблона ты можешь скачать по ссылке в начале статьи. Кроме него
там еще в качестве бонуса пара полезных библиотечек. Вот в кратце их описание:

        template.php  - упрощенный класс шаблонизатора
        template2.php - шаблонизатор с потдержкой циклов и ветвлений
        string.php    - полезные функции для работы со строками
        debug.php     - функции для отладки скриптов
        mysql_db.php  - функции для работы с БД MySQL. Например
                        db_getRow - возвращает ряд от переданого ей запроса
                        db_getAll - все результаты запроса и т.п.
        mssql_db.php  - функции для работы с БД MS SQL. Имеют теже названия
                        что и в mysql_db.php. Т.е. для перехода с одной бд на
                        другую достаточно просто изменить одну строку в файле
                        подключаемых библиотек. ( Не отлажен);
                        
 Т.к. эти модули зависят друг от друга, то приведу пример файла их подключающего
к проекту:

        <?php
        include_once("lib/mysql_db.php");
        include_once("lib/string.php");
        include_once("lib/debug.php");
        include_once("lib/template.php");
        include_once("lib/template2.php");
        include_once("include/config.php");

        $CONNECT=db_connect($dbhost,$dbuser,$dbpass,$dbname);
        ?>

 Все файлы подробно закоментированы, и при желании ты можешь их изменять как
тебе нравится =). Удачи в написании защищенного кода!



© Cobalt 09.11.2006 статья не оптимизирована

e-Commerce Partners Network
Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
20.09.2017 08:47:03 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Здравствуйте,...
Предупреждение
20.09.2017 08:20:25 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Мое...
Новая статья
20.09.2017 08:15:19 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Новый релиз
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100