PHP framework CodeIgniter. Установка и настройка.

Владимир | | CodeIgniter, PHP.

CI горящие буквыВ минимальном варианте для использования CodeIgniter необходимы web сервер (например, Apache) и интерпретатор PHP. Кроме того, в большинстве случаев нужен сервер баз данных (например, MySQL).

Примечание. Подробное описание настройки этих компонентов вы найдете в статье «Установка и настройка WAMP».

Предположим, что все необходимые компоненты у вас установлены, а переменная сервера DOCUMENT_ROOT указывает на папку E:/my_sites/www/.
Распаковываем в эту папку, скачанный с официального сайта, архив.

Если вы сейчас зайдете на ваш сайт (http://localhost/), то увидите страницу приветствия CodeIgniter. В принципе, установка уже завершена, но, по ряду причин, такой вариант далеко не самый лучший.

Главная проблема касается безопасности. Дело в том, что дистрибутив CodeIgniter состоит из двух частей: папки system со служебными файлами (в ней, кстати, будет размещаться ваше приложение) и основного контроллера – файл index.php. Во второй папке (user_guide) находится руководство пользователя.

Раз папка system, находится внутри DOCUMENT_ROOT, то посетители сайта в принципе могут получить доступ к файлам, которые находятся в ней. Например, набрав в браузере адрес http://localhost/system/application/views/welcome_message.php посетитель увидит страницу приветствия CodeIgniter. Именно по этой причине практически в каждой служебной папке CodeIgniter находятся файлы index.html, которые выводят текст «Directory access is forbidden» (Доступ к папке запрещен). Естественно, по настоящему запретить доступ таким образом нельзя.

Поэтому мы уберем папку system из DOCUMENT_ROOT. Например, перенесем в E:/my_sites. Т.е. получится следующая структура папок:
E:/my_sites/system/...
E:/my_sites/www/index.php - DOCUMENT_ROOT
.

Теперь для посетителя доступен только index.php. Но наш сайт перестал работать! Произошло это потому, что index.php не может найти системные файлы. Исправляем ситуацию.

Открываем index.php, и указываем в переменной $system_folder новое размещение:

$system_folder = "../system";

Если есть желание можно удалить файлы index.html из всех системных папок.

Кроме того, обратите внимание на переменную $application_folder (в файле index.php). В ней указано название папки, в которой находится ваше web приложение. По-умолчанию, ей присвоено значение «application«.

Посмотрите на структуру этой папки (system/application). Здесь находятся:
config/ — папка с конфигурационными файлами сайта;
controllers/ — папка для контроллеров;
models/ — папка для моделей;
views/ — папка для представлений (видов);
errors/ — здесь находятся страницы ошибок;
libraries/ — библиотеки, которые относятся только к вашему приложению;
hooks/ — хуки. Позволяют изменить поведение ядра фрэймворка (без изменения самих файлов ядра).

Эта структура папок соответствует архитектуре MVC, о которой я рассказывал в прошлой статье. CodeIgniter содержит специальные методы, которые позволяют загружать нужные компоненты сайта из этих папок.

Сразу хочу обратить ваше внимание на обработку ошибок. В файле index.php выполняется вызов функции:

error_reporting(E_ALL);

Это означает, что будет выведен отчет обо всех ошибках, что очень удобно во время разработки. Но после размещения готового сайта на сервере, будет лучше изменить значение параметра этой функции. Например, error_reporting(0) полностью отключит вывод сообщений об ошибках.

В следующий раз я продолжу рассказ о CodeIgniter и покажу, как сделать с его помощью несложный динамический web сайт.

До встречи!

Интересные материалы

Раскрутка и продвижение сайтов — задача, которую нужно доверить профессионалам.

  • MAX

    Можно конечно вынести system выше на уровень, но если честно, то смысла особого нет. С безопасностью это практически никак не сказывается, например потому что в начале каждого скрипта, работающего в CodeIgniter прописывается строчка:

    if (!defined('BASEPATH')) exit('No direct script access allowed');

    Соответственно, «чужой» запрос просто рубится в самом начале.

    Далее. Можно перенести каталог application на тот же уровень, что и system. Так даже удобней работать. 😉

    • В принципе, согласен. Системные скрипты посетитель выполнить не сможет.
      Но есть еще дополнительные библиотеки и собственные скрипты (вроде создания бэкапов, отправки сообщений, создания каких-нибудь отчетов и т.п.). И кто-то по невнимательности может засунуть их в системные папки. Конечно, угадать название и размещение такого скрипта практически не реально… Но всякое бывает.

      В любом случае, посетитель должен обращаться только к index.php (ну и файлам со стилями, картинками, js и т.п.). Ко системным скриптам доступ ему не нужен.

      >> перенести каталог application

      Можно не только перенести, но и название придумать получше 🙂 (особенно если нужно, что бы несколько сайтов использовали один дистрибутив CI).

    • sOm

      А может подскажете как это реализуется?

    • sOm

      я имел ввиду с application

      • Правкой файла index.php (который находится в корне сайта).

        Переменная
        $application_folder = «application»;
        Нужно указать новый путь и имя папки.

  • MAX

    Можно конечно вынести system выше на уровень, но если честно, то смысла особого нет. С безопасностью это практически никак не сказывается, например потому что в начале каждого скрипта, работающего в CodeIgniter прописывается строчка:

    if (!defined('BASEPATH')) exit('No direct script access allowed');

    Соответственно, «чужой» запрос просто рубится в самом начале.

    Далее. Можно перенести каталог application на тот же уровень, что и system. Так даже удобней работать. 😉

    • В принципе, согласен. Системные скрипты посетитель выполнить не сможет.
      Но есть еще дополнительные библиотеки и собственные скрипты (вроде создания бэкапов, отправки сообщений, создания каких-нибудь отчетов и т.п.). И кто-то по невнимательности может засунуть их в системные папки. Конечно, угадать название и размещение такого скрипта практически не реально… Но всякое бывает.

      В любом случае, посетитель должен обращаться только к index.php (ну и файлам со стилями, картинками, js и т.п.). Ко системным скриптам доступ ему не нужен.

      >> перенести каталог application

      Можно не только перенести, но и название придумать получше 🙂 (особенно если нужно, что бы несколько сайтов использовали один дистрибутив CI).

    • sOm

      А может подскажете как это реализуется?

    • sOm

      я имел ввиду с application

      • Правкой файла index.php (который находится в корне сайта).

        Переменная
        $application_folder = «application»;
        Нужно указать новый путь и имя папки.

  • Pingback: CodeIgniter: контроллер и представления()

  • Александр

    Добрый день господа профессиональные программисты! очень заинтересовал меня данный фреймворк — много слышал о нем хорошего. Даже виде скачал с официального сайта. http://codeigniter.com/tutorials/ Мне очень понравилась оболочка, в которой автор видео материалов писал код. Вот только я не понял, что это за программа, а может браузер. Не подскажите, что это за программа? А то Дримвейвер очень навороченный, а тут вроде все просто и в то же время все есть.
    С уважением Александр

  • Александр

    Добрый день господа профессиональные программисты! очень заинтересовал меня данный фреймворк — много слышал о нем хорошего. Даже виде скачал с официального сайта. http://codeigniter.com/tutorials/ Мне очень понравилась оболочка, в которой автор видео материалов писал код. Вот только я не понял, что это за программа, а может браузер. Не подскажите, что это за программа? А то Дримвейвер очень навороченный, а тут вроде все просто и в то же время все есть.
    С уважением Александр

  • Воланд

    у меня стоит денвер. Долго тыкался, но так и не понял куда именно надо копировать папки CI. Структура такая:
    диск > denwer
    home
    tmp
    usr

    Повторюсь, не совсем понял куда и что копировать. Сайты по дефолту хранятся в home > http://www.%name%.ru > www.

    …папки system со служебными файлами (в ней, кстати, будет размещаться ваше приложение)

    А где именно? Просто в папке system?

    Может у меня вопросы глупые, прошу извинить — только, можно сказать, начал разбираться. Поэтому мне многое не понятно.

    • В CI вы можете менять структуру папок. В этой статье я предлагал сделать так (для вашей структуры):
      home > http://www.%name%.ru > www >index.php

      home > http://www.%name%.ru > system > ….

      Т.е. папка system на уровень выше, чем index.php. Таким образом напрямую обратиться к служебным файлам CI будет нельзя.

  • Воланд

    у меня стоит денвер. Долго тыкался, но так и не понял куда именно надо копировать папки CI. Структура такая:
    диск > denwer
    home
    tmp
    usr

    Повторюсь, не совсем понял куда и что копировать. Сайты по дефолту хранятся в home > http://www.%name%.ru > www.

    …папки system со служебными файлами (в ней, кстати, будет размещаться ваше приложение)

    А где именно? Просто в папке system?

    Может у меня вопросы глупые, прошу извинить — только, можно сказать, начал разбираться. Поэтому мне многое не понятно.

    • В CI вы можете менять структуру папок. В этой статье я предлагал сделать так (для вашей структуры):
      home > http://www.%name%.ru > www >index.php

      home > http://www.%name%.ru > system > ….

      Т.е. папка system на уровень выше, чем index.php. Таким образом напрямую обратиться к служебным файлам CI будет нельзя.

  • Bishake

    Чтобы не менять иерархию папок для обеспечения безопасности, можно просто в папке system создать .htaccess с директивой deny from all.

  • Тоже хороший вариант.
    Но не удобно, если есть несколько приложений и желательно использовать общие файлы фреймворка.

    • Qaz123d7

      Извените я тоже начинающий помогите настроить CI на linux Ubuntu

      • У CI нет никаких особенностей настройки на linux.
        Скорее всего, вам нужна инструкция по настройке Apache+PHP+MySQL.

  • NVP

    Ваши уроки для меня были просто находкой. Спасибо…

  • NVP

    Ваши уроки для меня были просто находкой. Спасибо…

  • Magraden

    Информация устарела. В новой версии фреймворка application вынесена в корень.