Как создать свой сайт на PHP? Или зачем нужны фреймворки?

Владимир | | CodeIgniter, Разное.

Создание своего сайта
Создание современного web сайта (приложения) представляет собой довольно трудоемкую задачу. Когда вы читаете книгу или руководство, то все кажется довольно простым. Демонстрационные программы редко бывают больше нескольких страницы. Все красиво работает…

Но, проблема в том, что это учебные примеры. Как только вы попытаетесь использовать их на практике, вы увидите, как увеличивается объем кода. Рассмотрим обработку данных, полученных из формы. Мы должны:

— проверить тип полученных значений;
— убедиться, что значения имеют допустимые величины (или формат);
— удалить из текста запрещенные теги (защита от XSS);
— заменить в параметрах SQL-запросов служебные символы на их эскейп последовательности (защита от SQL Injection);
— если параметры связаны между собой, проверить эти связи;
— и т.д.

Естественно, этот код должен быть не только написан, но и протестирован. Как видите, приличный кусок работы. Причем в большинстве своем это рутинные операции, которые повторяются практически во всех приложениях.

А т.к. программисты народ ленивый и два раза писать один и тот же код не любят, всевозможные решения начали появляться как грибы после дождя.

Итак, сегодня для создания web сайта (приложения) существует три основных подхода (или их комбинации).

1) Использовать «чистый» PHP + стандартные и дополнительные библиотеки. Этот вариант самый трудоемкий, но при этом обладает наибольшей гибкостью. Вы можете реализовать практически любой функционал и при этом обеспечить максимальную производительность. Правда есть один нюанс. Хороший продукт вы получите только после тестирования и оптимизации приложения, а это совсем не такой простой процесс, как кажется на первый взгляд.

2) Использовать готовое решение. На сегодняшний день практически для всех широко распространенных типов сайтов существуют готовые движки. Например, WordPress, Joomla, PHPbb и многие другие. Тут можно вообще обойтись без программирования, т.к. эти решения представляют собой готовые сайты (блоги, порталы, форумы и т.п.) вы только создаете контент. Отсюда и название CMS (content management system) – системы управления контентом. Если стандартной функциональности не хватает, то можно написать плагин (или найти готовый). В принципе многие такие системы обеспечивают неплохую производительность, но только в тех задачах, для которых они изначально проектировались. Т.е. вы сможете добавить нужные вам функции, но при этом производительность (потребление ресурсов) может быть значительно хуже, чем в первом варианте.

3) Использовать фрэймворк (framework). В принципе, фрэймворк можно считать дополнительной библиотекой. Но есть существенное отличие. Библиотеку вы используете для расширения функциональности приложения. А фрэймворк кроме того определяет архитектуру (взаимосвязи между компонентами) приложения. Если использовать аналогии со строительством дома, то библиотеками можно считать кирпичи, оконные и дверные блоки, а фрэймворком – фундамент и несущие стены (знаю, сравнение довольно грубое, но суть отражает). В принципе, использование фрэймворка это что-то среднее между первым и вторым вариантом. С одной стороны свобода ваших действий будет ограничена по сравнению с первым вариантом, но эти ограничения незначительные по сравнению с готовыми решениями.

Я хочу рассказать об одном из самых популярных PHP фрэймворков – Code Igniter. Сегодня я кратко остановлюсь на его основных возможностях, а в следующих выпусках блога покажу несколько примеров.

Почему именно Code Igniter? На сегодняшний день существует довольно много PHP фрэймворков. Но, Code Igniter, на мой взгляд, обладает несколькими важными достоинствами. Прежде всего, это простота установки и настройки, а также хорошая документация. Кроме того, библиотеки, входящие в состав этого фрэймворка практически не зависят друг от друга, что позволяет снизить потребление ресурсов. При этом ничто не мешает использовать свои собственные библиотеки вместо стандартных.

В качестве основного архитектурного шаблона Code Igniter использует MVC (model-view-controller или по-русски модель-вид-контроллер). О достоинствах и недостатках этой архитектуры написано очень много, но, тем не менее, на сегодняшний день она является самой распространенной. Например, в обзоре Taking a look at ten different PHP frameworks рассмотрено 10 PHP фрэймворков, и 8 из них используют архитектуру MVC.

Сайт, построенный в соответствии с этой архитектурой состоит из компонентов трех видов (модели, вида и контроллера).
На диаграмме показаны связи между этими компонентами.

Диаграмма классов MVC

Диаграмма 1. Архитектура MVC.

Контроллер представляет собой центр управления. Он получает запросы от браузера и обрабатывает их.
Модель используется для работы с данными (например, для чтения/записи/обновления данных в БД и т.п.).
Вид формирует html страницу, которая отправляется браузеру.

Примечание. Из диаграммы видно, что модель ничего не знает об остальных компонентах, а вид не знает о контроллере.

Таким образом, эта архитектура позволяет разделить три основных этапа работы сайта (web приложения).

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

Библиотеки, которые входят в состав Code Igniter помогают решить практически все обычные задачи. Но кроме этого, я советую обратить внимание на два ресурса.

codeigniter.com/wiki/ — здесь можно найти множество полезных советов и дополнительных библиотек.

www.ciforge.com/ — этот ресурс специально предназначен для размещения проектов, связанных с Code Igniter. Если я не ошибаюсь, на сегодняшний день тут размещено более двадцати проектов.

Думаю, на сегодня достаточно. В следующий раз я расскажу об установке и настройке фреймворка.

Удачи!

Интересно почитать

Современные навесы из поликарбоната украсят вид любого здания.

  • Вид формирует html страницу, которая отправляется браузеру.

    Насколько просто с этой библиотекой соблюсти SOA-модель? есть ли интересные решения по преобразованию массивов данных в JSON или XML? в чем принципиальное преимущество по сравннию со Smarty или это аналоги?

    • >> SOA-модель

      В состав фрэймворка входят два класса XML-RPC и XML-RPC Server, специально предназначенных для работы с web сервисами.
      Работать с ними не сложно. XML разметка формируется классами, а параметры передаются в виде массивов. В общем, получается довольно компактный код.

      >> JSON

      Для преобразования массива в JSON можно использовать
      json_encode($arrayName);
      По-моему, нет смысла включать аналог в фрэймворк.

      Насчет XML. Присутствует XML Helper, но там всего один метод. Поэтому придется использовать дополнительную библиотеку.

      >> Smarty

      Нет, это не аналоги. Smarty это шаблонизатор. В Smarty вы работаете с шаблоном, который потом будет преобразован в php скрипт (отрицательно сказывается на быстродействии). В CodeIgniter все компоненты представляют собой php скрипты.

      • Smarty не влияет на быстродействие т.к. шаблоны преобразуются только после внесения изменений, а не постоянно!

        • Я знаю, что smarty кеширует шаблоны. Но где-то видел результаты тестов, показывающих, что некоторое снижение производительности все равно есть. Да и в официальной документации разработчики этого не отрицают. Там просто написано, что это снижение минимальное.

  • Вид формирует html страницу, которая отправляется браузеру.

    Насколько просто с этой библиотекой соблюсти SOA-модель? есть ли интересные решения по преобразованию массивов данных в JSON или XML? в чем принципиальное преимущество по сравннию со Smarty или это аналоги?

    • >> SOA-модель

      В состав фрэймворка входят два класса XML-RPC и XML-RPC Server, специально предназначенных для работы с web сервисами.
      Работать с ними не сложно. XML разметка формируется классами, а параметры передаются в виде массивов. В общем, получается довольно компактный код.

      >> JSON

      Для преобразования массива в JSON можно использовать
      json_encode($arrayName);
      По-моему, нет смысла включать аналог в фрэймворк.

      Насчет XML. Присутствует XML Helper, но там всего один метод. Поэтому придется использовать дополнительную библиотеку.

      >> Smarty

      Нет, это не аналоги. Smarty это шаблонизатор. В Smarty вы работаете с шаблоном, который потом будет преобразован в php скрипт (отрицательно сказывается на быстродействии). В CodeIgniter все компоненты представляют собой php скрипты.

  • MAX

    Неплохо. Будем ждать продолжение. 🙂

    Пара замечаний (можно удалить):
    CodeIgniter «вместе» пишется.

    Вот неплохое описание MVC по-русски: http://chtivo.webhost.ru/articles/mvc.php

    • >> CodeIgniter «вместе» пишется

      Спасибо, все время забываю 🙂

      Ссылка очень хорошая. Я сам с MVC разбирался в основном по php|architect’s Guide to PHP Design Patterns (Jason E. Sweat). Книга очень хорошая, но на английском.
      Так что ссылка как раз «в тему» 🙂

      • Алекс

        А книг на русском никаких нету ?:)
        Заранее спасибо!

        • Есть неполный перевод тьюториала CI на русский. Находится здесь.

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

  • MAX

    Неплохо. Будем ждать продолжение. 🙂

    Пара замечаний (можно удалить):
    CodeIgniter «вместе» пишется.

    Вот неплохое описание MVC по-русски: http://chtivo.webhost.ru/articles/mvc.php

    • >> CodeIgniter «вместе» пишется

      Спасибо, все время забываю 🙂

      Ссылка очень хорошая. Я сам с MVC разбирался в основном по php|architect’s Guide to PHP Design Patterns (Jason E. Sweat). Книга очень хорошая, но на английском.
      Так что ссылка как раз «в тему» 🙂

      • Алекс

        А книг на русском никаких нету ?:)
        Заранее спасибо!

        • Есть неполный перевод тьюториала CI на русский. Находится здесь.

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

  • Спасибо за хорошую подборку статей по CodeIgniter. Пока что остановил свой выбор именно на нем. Намного естественнее и понятнее чем симфони и легче в развертывании по сравнению с джанго. Буду продолжать знакомство, надеюсь не разочаруюсь.

    Что еще посоветуете почитать по теме?

    • Есть две книги о CI, но они на английском. Если устраивает, могу выслать по почте (откуда скачивал не помню).
      Кроме того, ссылки на ресурсы я собирал здесь.
      Еще есть форум.

  • Спасибо за хорошую подборку статей по CodeIgniter. Пока что остановил свой выбор именно на нем. Намного естественнее и понятнее чем симфони и легче в развертывании по сравнению с джанго. Буду продолжать знакомство, надеюсь не разочаруюсь.

    Что еще посоветуете почитать по теме?

    • Есть две книги о CI, но они на английском. Если устраивает, могу выслать по почте (откуда скачивал не помню).
      Кроме того, ссылки на ресурсы я собирал здесь.
      Еще есть форум.

  • Xstyle

    А чем плох Akelos? Практически тот же CI, только с более прозрачной поддержкой ajax и модулей.

    • А никто и не говорит, что Akelos плох. Вообще у фреймворков очень много общего. И, честно говоря, от разработчика зависит гораздо больше чем от фреймворка.

      Я с Akelos не работал. Но в плане документации он проигрывает тому же CI. Понятно, текущая версия имеет номер 0.8 и, думаю, через некоторое время они допишут недостающие разделы, но на данный момент документации явно мало.

  • Xstyle

    А чем плох Akelos? Практически тот же CI, только с более прозрачной поддержкой ajax и модулей.

    • А никто и не говорит, что Akelos плох. Вообще у фреймворков очень много общего. И, честно говоря, от разработчика зависит гораздо больше чем от фреймворка.

      Я с Akelos не работал. Но в плане документации он проигрывает тому же CI. Понятно, текущая версия имеет номер 0.8 и, думаю, через некоторое время они допишут недостающие разделы, но на данный момент документации явно мало.

  • Можно мне тоже книги? 🙂

  • Можно мне тоже книги? 🙂

  • Александр

    Статья ни о чем… Совершенно не раскрывает темы! В названии написано «Или зачем нужны фреймворки?» так для чего же они нужны? Чтоб реализовать архитектуру модель-вид-контроллер?Хотябы небольшой пример преимущества привели. В общем полный минус!

    • так для чего же они нужны?

      Чтобы не приходилось каждый раз писать один и тот же код.
      Приводить список всех возможностей нет смысла, их можно посмотреть в документации. А MVC — одно из основных преимуществ, которое определяет архитектуру приложения.

    • rootinnik

      Сам ты «полный минус»! Самое то для начинающего. Напиши лучше а уж потом «минусуйся».
      Спасибо за статью. Только начал разбираться и статьи в самую тему — не много и не мало. Все в одной статье не опишешь.

      • Спасибо 🙂

      • Это не статья — это заметка, сделанная для раскрутки блога. Ничего путного. Таких статей как грязи.

  • Александр

    Статья ни о чем… Совершенно не раскрывает темы! В названии написано «Или зачем нужны фреймворки?» так для чего же они нужны? Чтоб реализовать архитектуру модель-вид-контроллер?Хотябы небольшой пример преимущества привели. В общем полный минус!

    • так для чего же они нужны?

      Чтобы не приходилось каждый раз писать один и тот же код.
      Приводить список всех возможностей нет смысла, их можно посмотреть в документации. А MVC — одно из основных преимуществ, которое определяет архитектуру приложения.

    • rootinnik

      Сам ты «полный минус»! Самое то для начинающего. Напиши лучше а уж потом «минусуйся».
      Спасибо за статью. Только начал разбираться и статьи в самую тему — не много и не мало. Все в одной статье не опишешь.

  • Александр

    А по каким критериям сортируются комменты?

  • Александр

    А по каким критериям сортируются комменты?

  • GABRIEL

    Можно и мне выслать книги. Заранее спсибо.

  • GABRIEL

    Можно и мне выслать книги. Заранее спсибо.

  • GABRIEL

    Что-то не получается скачаь. Можно выслать на этот адрес.

  • GABRIEL

    Что-то не получается скачаь. Можно выслать на этот адрес.

  • GABRIEL

    Спасибо, получил.

  • GABRIEL

    Спасибо, получил.

  • bt

    Это похоже баг WP

    ППЦ. Только по этому комментарию, не вдаваясь в статью, складывается ощущение, что пишет человек ПОЛНОСТЬЮ далёкий от программирования… Неужели в WP так сложно разобраться в сортировке коментов?

    • Я ленивый 🙂
      Искать баги в WP, которые, скорее всего, будут исправлены при очередном обновлении у меня нет никакого желания.

      • Эдуард

        Отправьте мне пожалуйста а можно создать интернет магазин типа такого http://magnetic-bracelets.ru

  • bt

    Это похоже баг WP

    ППЦ. Только по этому комментарию, не вдаваясь в статью, складывается ощущение, что пишет человек ПОЛНОСТЬЮ далёкий от программирования… Неужели в WP так сложно разобраться в сортировке коментов?

    • Я ленивый 🙂
      Искать баги в WP, которые, скорее всего, будут исправлены при очередном обновлении у меня нет никакого желания.

  • Qwrer

    ну и что ж вы нового рассказали? быдло-кодеры, гавноеды

  • Povar
  • GENA

    Очень полезная информация. Немного больше о PHP фреймворках можно узнать здесь:
    http://netcoding.ru/articles/php/php-freymvorki/

  • inforus

    Большое спасибо за статью!

  • Констанин

    Создать самому сайт будет Вам не проблема, если знаете уже некоторые нюансы и основы HTML и CSS, останется побольше освоить серверный язык программирования РНР.

    Сначала надо попрактиковаться на своем компьютере (Денвером, уже имеется программа без установки) и после создания и проверки работы с нею, смело загружаем уже готовые свои проекты.

    Они будут такими же одинаковыми, в отображении, какие были и на компьютере. Часто для разработки сайтов применяют фреймворк CodeIgniter. Источник — http://php-bce.ru

  • Констанин

    CodeIgniter — это фреймворк, что подразумевает как бы такое приложение
    для создания сайта на серверном языке программирования РНР, с помощью
    которого в основном делают много веб-ресурсов в Интернет сети.

    Если Вы только начинающий сайтостроитель, то сначала свои проекты надо
    практиковаться и начинать делать на компьютере, с помощью программы
    Денвер. Эта программа уже имеется без установки на компьютер, и все
    проделанные работы с нею будут одинаково отображаться в любом открытом
    окне браузера, на компьютере и также в Интернет.
    Источник — http://php-bce.ru/cat.php?cat=5

  • CodeIgniter — это фреймворк, что подразумевает как бы такое приложение для создания сайта на серверном языке программирования РНР, с помощью которого в основном делают много веб-ресурсов в Интернет сети.

    Если Вы только начинающий сайтостроитель, то сначала свои проекты надо практиковаться и начинать делать на компьютере, с помощью программы Денвер. Эта программа уже имеется без установки на компьютер, и все проделанные работы с нею будут одинаково отображаться в любом открытом окне браузера, на компьютере и также в Интернет.
    Источник — http://php-bce.ru/index.php