Codeigniter не работает на хостинге

В данном руководстве по CodeIgniter мы представим этот фреймворк. Рассмотрим, как установить и настроить CodeIgniter на виртуальный хостинг от Hostinger, и, к тому же, построим первое приложение на PHP, используя этот популярный фреймворк. Также расскажем об MVC и чем эта схема помогает в современной веб разработке.

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

CodeIgniter один из таких фреймворков доступных для PHP-разработчиков. Вероятно, самый популярный среди подобных, он очень ускоряет веб разработку на PHP благодаря многочисленным библиотекам и пакетам. Библиотеки удобно применять там, где распространено повторное использование кода, снимая с разработчиков необходимость выполнять рутинную работу.

Основанная на архитектуре Модель-Представление-Контроллер (Model View Controller), CodeIgniter также добавляет логическое разбиение для вашего приложения. Это отражается не только на чистоте и лучшей структурированности приложения, но и полезно для распараллеливания циклов разработки. В результате в ваши продукты легко вносить изменения и можно значительно ускорить их выход на рынок.

Предполагается, что вы имеете базовые знания в PHP и опыт работы с командной строкой в Linux.

Для установки CodeIgniter, вам понадобится либо виртуальный хостинг Hostinger или LAMP (Linux, Apache, MySQL, PHP) уже готовые к работе и запущенные на VPS или на вашей локальной системе. Данное руководство подходит для выполнения на любом дистрибутиве Linux; разумеется, мы используем аккаунт на виртуальном хостинге от Hostinger.

Прежде всего, зайдите по SSH в свой аккаунт. Если вы не уверенны, что знаете как это сделать, посмотрите это руководство.

Чтоб начать процесс установки откройте терминал и войдите в каталог public_html. В нашем случае это можно сделать следующей командой:

Теперь нужно скачать последнюю версию CodeIgniter. Это можно сделать посетив официальную страницу для скачивания, и закачав оттуда zip файл. На момент написания этого руководства, последняя выпущенная стабильная версия CodeIgniter была 3.1.4.:

Для распаковки файла выполните эту команду:

Теперь вы сможете распаковать при помощи unzip вашу копию CodeIgniter.
После распаковки вы увидите каталог с названием CodeIgniter-3.1.4. Вы можете его переименовать для удобства, например, так:

Откройте браузер и введите путь к этому каталогу:
http://yourdomain.com/codeigniter

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

Так как вы только установили CodeIgniter, то первым делом его нужно настроить. Хотя это и самая объёмная часть нашего руководства, к счастью, настройку CodeIgniter нужно делать всего раз, после установки.

Начнём с создания нового пользователя базы данных MySQL. На Hostinger это можно сделать в разделе “Базы Данных MySQL”.

В начале процесса настройки CodeIgniter нужно предоставить всю необходимую информацию о вашей базе данных MySQL. Это можно сделать изменяя файл database.php в комплекте поставки CodeIgniter. Откройте файл запустив следующую команду:

Теперь вам видно содержимое файла. Нужно найти следующую часть файла и включить туда информацию по настройкам вашей базы данных MySQL. Например, для подключения к базе данных, созданной в Hostinger, файл настройки должен выглядеть вот так.

Как только вы обновите файл соответствующей информацией, сохраните его и закройте. И это всё – вы успешно синхронизировали вашу базу данных с CodeIgniter.
Следующим действием нужно прописать ваше доменное имя. Для этого откройте файл config.php:

После открытия найдите и отредактируйте строку.

Эта строка означает, что у вас есть yourdomain.com и он указывает на каталог, в котором установлен CodeIgniter (последняя команда в Шаге 1), отредактируйте файл config.php, как указано в строке выше.

Пропустите этот раздел, если вы устанавливаете Codeigniter на виртуальный хостинг Hostinger.

Виртуальный хост удобен, если вы собираетесь запустить несколько приложений, используя одно доменное имя. Это может помочь, если у вас есть один VPS и несколько приложений, продуктов или чего-либо ещё, запущенного на нём. Вы можете создавать виртуальные хосты при помощи сервера Apache.

Хотя создание виртуальных хостов и выходит за рамки этого руководства, всё же вам нужно сделать некоторые дополнительные изменения в настройках CodeIgniter перед началом разработки.

Прежде всего, нужно убедиться, что корень документа синхронизирован с каталогом установки CodeIgniter. Для этого откройте файл виртуального хоста:

В открытом файле ищите такой блок и вставляйте каталог установки после Document Root:

Убедитесь, что путь /path/to изменён на настоящий.

Теперь все ваши URL-ссылки будут указывать туда, где установлен CodeIgniter.
Для следующих изменений нужны некоторые разъяснения. По умолчанию CodeIgniter придерживается следующего формата URL-ссылки:

Как видите, index.php единственная статическая часть URL-ссылки. В целях поддержания хорошей практики разработки, попробуем избавится и от него.

Для этого откроем ещё раз файл config.php:

И заменим следующую строку:

Пока что это только половина дела. Чтобы убедиться, что вы не подверглись череде ошибок, нужно перенаправить запросы с помощью файла .htaccess.

Прежде чем это сделать, проверьте включён ли у вас mod_rewrite:

Этой командой Apache отобразит список всех возможностей сервера. Если в списке среди них вы найдёте mod_rewrite, переходите к следующей команде. Если же нет, то выполните такую команду:

И перезапустите ваш сервер:

Теперь, создайте файл .htaccess в корне каталога CodeIgniter:

Эта команда создаст и откроет файл .htaccess. Разместите такие строки в файле, сохраните и выйдите из него:

И наконец, нужно дать знать серверу Apache, что он должен проверить вновь созданный файл .htaccess. Чтобы сделать это, откройте файл виртуальных хостов и убедитесь, что AllowOverride установлено в значение All:

Теперь в своём ULR вы не будете видеть немилый глазу index.php. В результате, ваши URL-адреса будут выглядеть чисто и красиво.

Чтобы лучше понять, что же делает фреймворк, такой как CodeIgniter, стоит часть этого руководства посвятить освещению вопроса, что такое MVC.

MVC является преимущественно парадигмой архитектуры веб-разработки, которая рекомендует, чтобы в каждом приложении бизнес-логика отделялась от визуальной части – представления. Этот подход делит приложение на три функциональные части: Модель, Представление и Контроллер.

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

Поскольку CodeIgniter поддерживает объектно-ориентированное программирование (ООП), все модели и контроллеры это PHP классы, расширяющие основные классы предоставленные фреймворком. Представление это так же файлы PHP, но только в названии, так как внутри они содержат HTML/CSS. Для отображения данных, предоставленных Моделью, присутствуют только фрагменты кода PHP.

MVC даёт разработчику дополнительную гибкость в терминах повторного использования кода и разделения дизайна и реализации. У вас могут быть вложенные части интерфейса и вам не придётся писать один и тот же код для разных представлений – хорошим примером может быть панель навигации на каждой странице приложения. И, так как уровень модели и уровень представления разделены, разработчики интерфейса могут работать параллельно с основной командой разработчиков, тем самым значительно сокращая время создания приложения.

Как CodeIgniter формирует URL уже рассматривалось выше:

В предыдущем разделе мы увидели, как удалить index.php из формата адреса. В результате этот шаблон транслируется в ссылки URL подобные этой:

http://www.yourdomain.com/welcome/tester/1
Здесь, welcome это обрабатывающий класс (контроллер) для файла контроллера welcome.php. Внутри этого класс он вызовет функцию tester() и передаст ей ‘1’ в качестве параметра. Любые другие параметры могут быть переданы таким же образом, разделяя косой чертой.

Как видите, маршрутизация в CodeIgniter очень проста для понимания. Вы можете поиграться и создать более сложные варианты роутинга, но здесь мы не будем их рассматривать.

Другая полезная особенность CodeIgniter – это использования существующих средств для быстрого решения общих задач. CodeIgniter делает это, предоставляя библиотеки и вспомогательные функции помощники(helpers). Конкурентным преимуществом CodeIgniter также является предоставление возможности выбирать, какие библиотеки и когда загружать. Как результат быстрые, легкие и многофункциональные приложения, так как библиотеки подгружаются по требованию.

Загрузить библиотеку в CodeIgniter очень просто. Например, чтобы загрузить библиотеку базы данных, просто передайте эту строку своей модели или контроллеру (рекомендуется использовать модель, хотя и не обязательно в CodeIgniter):

Конечно, некоторые библиотеки и помощники на столько часто применяются, что удобнее делать их автозагрузку сразу при загрузке приложения. В качестве примера может быть библиотека базы данных, так как база данных это неотъемлемая часть любого современного веб-приложения и URL помощник, который может оказаться полезным при загрузке URL-адресов.
Чтобы установить автозагрузку библиотеки базы данных, откройте следующий файл:

После открытия измените строку:

Можно загрузить дополнительные библиотеки в методе array(), разделяя их запятыми.

Аналогично для помощников замените эту строку:

Теперь, когда вы знаете больше о MVC, надеемся вы сможете по достоинству оценить чудеса CodeIgniter.

И вот, от формальностей настройки мы добрались до самой интересной части руководства. На этом этапе нужно будет запустить свой CodeIgniter с изменениями, которые мы внесли на Шаге 2. Вам так же уже должно быть понятно, как работает Модель, Представление и Контроллер в CodeIgniter. В этом разделе мы будем применять эти знания в создании простого веб приложения на CodeIgniter.
Приложение будет очень простым по структуре: при помощи нашей модели мы будет доставать обзоры видео из нашей базы данных и показывать их в нашем представлении. Контроллер будет выполнять маршрутизацию запросов между моделью и представлением. Когда вы получите основы применения CodeIgniter, вы сможете построить более сложное приложение.

Как уже говорилось во Вступлении к этому руководству, нужно, чтобы у вас были базовые знания MySQL. Для нашего простого приложения нам нужно будет создать таблицу с названием reviews и 3 колонки: id (primary key и самоинкрементирующееся), title и grade.

Эта таблица будет базой для нашего приложения, поэтому нужно её сделать прежде всего. Далее предоставить доступ CodeIgniter к вашей базе данных, следуя инструкциям из Шага 2. После создания таблицы, заполните её произвольными значениями.

После того, как вы разобрались с базой данных, мы можем начать работу над бизнес-логикой. Для этого создадим модель, которая будет получать значения из базы данных.

Модель располагается в каталоге applications/models CodeIgniter. Распределение по каталогам поможет избежать беспорядка в структуре приложения. Переходите в каталог и создавайте новый PHP-файл с названием reviews_model.php.

Как только создали, скопируйте в файл следующий код:

Как видите, класс модели News_model расширяет родительский класс CI_Model, предоставляемый CodeIgniter. Также обратите внимание, что первая буква названия класса должна быть заглавной – это требования CodeIgniter к именованию классов.

Теперь нужно загрузить библиотеку работы с базами данных, о которой мы говорили на Шаге 3. Это позволит с лёгкостью работать с базами данных. Вы можете использовать метод конструктора модели, который загрузит библиотеку при запуске. Для этого разместите следующий код в созданном выше классе:

Теперь библиотека базы данных будет видимой каждому методу внутри класса. Далее нужно создать другой метод, который будет использовать библиотеку для выполнения запросов к базе данных:

Метод, код которого приведен выше, принимает ID, как аргумент, и возвращает все данные из строки в таблице reviews, связанные в этим ID. Таким образом, этот метод будет вызываться каждый раз, когда мы запрашиваем обзор фильма.

Мы позаботились о слое доступа к данным. Теперь нужно создать маршрут, чтобы, когда пользователь запрашивает обзоры видео, наше, ещё не созданное представление, было обеспечено данными, которые мы получили при помощи модели.

Для создания нового контроллера перейдите в каталог application/controllers и создайте там файл reviews.php. Помните: контроллер в CodeIgniter должен называться также, как и определяемый класс внутри файла.
После создания файла откройте его и вставьте такой код:

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

Массив $data – это ассоциируемый массив , с ключами title и grade, соответствующими значениям, полученным из базы данных. Этот массив передаётся в представление с именем movie_review и загружается для отображения.

И наконец, мы создаёт представление, которое отобразить запрашиваемые отзывы о видео.

Войдите в каталог application/views и создайте там файл movie_review.php. Обратите внимание, что название файла должно совпадать с тем, которое вы сообщили контроллеру для загрузки (последняя строка метода show()). После создания файла скопируйте в него этот код:

Представление отображает название видео и отзыв из массива $data, переданного контроллером. Не обязательно говорить, что результат будет не особо привлекательным, так как мы не подключили никаких стилей для нашего представления. Конечно, вы можете добавить стили прямо здесь (что не очень рекомендуется) или подключить внешний CSS файл.

Наше пробное приложение готово. Вы можете запустить это приложение в браузере по адресу:

http://yourdomain.com/reviews/show/1

Это вызовет контроллер reviews, который мы создали на шаге 4.3 и вызовет его метод show() со входным параметром 1. Этот параметр принимается как идентификатор видео ID; что будет использовано, как запрос к базе данных для получения данных о видео с ID = 1. В результате, пользователь теперь может видеть название и отзыв первого в базе данных видео.

В этом углублённом руководстве CodeIgniter, мы познакомились с тем, как установить и настроить его, а также создали простое приложение, используя фреймворк. Мы также рассмотрели MVC – основной принцип стоящий за организацией фреймворка CodeIgniter и почему он так полезен в современных веб-приложениях.

В виду того, что наш пример приложения был достаточно прост: с одной моделью, представлением и контроллером и единой базой данных, мы надеемся, что вам будет более понятна именно структура и функционирование CodeIgniter.

Прочитав руководство и разобравшись в нём, вам станет яснее как, используя CodeIgniter, построить динамические, масштабируемые и выдерживающие нагрузку приложения быстрее, чем раньше, применяя всю мощность библиотек и помощников фреймворка. Мы надеемся, что смогли вам показать, как прост и одновременно функционален CodeIgniter и желаем вам успехов в вашем развитии как веб-разработчика и в частности продуктивной работы с PHP-фреймворками.

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Я видел несколько вводных руководств для Codeigniter и надеялся показать вам что-то более продвинутое. В этом уроке вы узнаете, как создать мощное веб-приложение для размещения изображений, используя гибкость Codeigniter. В этом учебном пособии вы узнаете о философии MVC, которая является неотъемлемой частью создания веб приложений.

Прежде чем мы отправимся писать код, нам нужно сделать некоторые настройки. Запустите свой любимый редактор базы данных (я буду использовать SQLBuddy) и создаю новую базу данных под названием ‘uploadr’. В этом случае создайте две таблицы: « users» и « files». Настройте пользователей, чтобы они имели первичный ключ, авто-нумерованный столбец «id», а также два столбца varchar: «password» и «username». Таблице файлов нужен столбец «id» (опять-таки первичный ключ и авто-нумерованный), а также столбец «owner» и столбец «name» varchar.

Поскольку этот урок сосредоточен на изучении программирования Codeigniter и MVC, мы собираемся отказаться от всех стилей (например, CSS, photoshop). С этой целью я создал для вас специальную установку Codeigniter, со всеми созданными файлами и представлениями (в основном) HTML-d и CSS-d. Две вещи, которые вам нужно изменить, — это настройки конфигурации и базы данных. Я даже включил штамп «Бета», поэтому проект еще больше будет походить на реальный веб-запуск!

Теперь наш первый кусочек мяса! Откройте ‘login.php’ контроллер и создайте функцию под названием «register». Она будет контролировать весь процесс регистрации. Во-первых, нам нужно проверить, были ли отправлены запросы POST на сервер. В этом случае это означают, что кто-то пытается зарегистрироваться. Мы можем это сделать, проверив, установлен ли $ _POST[‘username’]. Если это так, то мы знаем, что кто-то пытался зарегистрироваться, и может добавить его в БД.

Если пользователь еще не попытался зарегистрироваться, метод обнаруживает это и автоматически отправляет их в представление «register», которое я уже добавил для вас. Вы видите строку:

Это вызывает функцию «register» в модели users. На данный момент это не сработает, так как мы не загрузили модель. Мы делаем это так же, как и с загрузкой видов, но поскольку мы будем широко использовать эту модель в этом классе, мы загрузим ее в конструкторе (функция с тем же именем, что и класс), так что она будет всегда загружена и доступна:

Вероятно, вы заинтересованы в том, что фактически содержится в функции регистрации. Ну, она просто использует пару функций Codeigniter Active Record, которые позволяют манипулировать БД. Большое преимущество использования встроенных функций Codeigniter Active Record (помимо того, что они приятные и простые) заключается в том, что они не привязаны к конкретной базе данных: вы можете легко переключаться между разными типами баз данных (например, mySQL, SQLite), не влияя на приложение. В случае нашей регистрации мы добавляем запись в таблицу пользователей. Создайте эту функцию в ‘users.php’ модель:

Единственное, что стоит заметить в представлении регистрации, это функции site_url() и base_url(). Они соответственно дают URL вашего сайта с и без index.php/ суффикса. Наибольшее преимущество в их использовании состоит в том, что вы можете изменить структуру URL своего сайта, не переходя через все ссылки: это просто одно изменение в вашем файле конфигурации.

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

Теперь, когда у нас настроено несколько пользователей, нам нужен способ фактически позволить им попасть на сайт. Для этого мы будем использовать класс сессии Codeigniter. Хотя это фактически использует куки-файлы, его работа очень похожа на обычные PHP-сессии, просто с большим количеством опций (я рекомендую вам проверить userguide).

Для начала нам нужно создать функцию, на которую на данный момент указывает кнопка входа в систему, ‘go’. Эта функция должна будет собирать информацию, которую отправила форма, а затем проверить ее в БД с использованием модели. Если все правильно, он начнет сеанс и перенаправит пользователя на свои файлы. Если данные введены неверно, пользователь будет перенаправлен на страницу входа в систему.

Части этой функции должны быть хорошо знакомы вам из функции register: она собирает $username и $password, прежде чем отправлять их в модель (на этот раз «login»). После этого, однако, начинают возникать различия.

Затем функция проверяет, не удалось ли войти в систему; если не удалось, то пользователь перенаправляется обратно на страницу входа. Однако, если вход успешно завершен, сценарий создает сеанс, устанавливая «userid» для идентификатора пользователя. Все, что нам нужно для скрипта входа в систему, — это модель. Добавьте эту функцию в модель users , которую мы использовали ранее:

Быстро пробежимся по коду: во-первых, она запрашивает базу данных, ища при этом пользователей с точно такими же именем пользователя и паролем. Если она ничего не найдет, то число строк будет равно 0, а функция вернет false. Если кто-то был найден, она использует другую функцию Codeigniter Active Record для загрузки этой записи в качестве объекта. Эти объекты появляются как массив строк БД, каждый из которых содержит объект с информацией об этих строках. Поскольку нам нужна первая и единственная строка, мы берем ее из $result, а затем возвращаем идентификатор.

На странице профиля нам нужно будет проверить, вошел ли пользователь. Для этого мы просто вставляем две строки кода в конструктор контроллера профиля. Это проверит, что сеанс содержит идентификатор пользователя. Если это не так, перейдите на страницу входа. Если да, то все нормально, и он превращается в общедоступную переменную. Пока мы меняем конструктор, мы загрузим две модели, которые нам понадобятся для страницы профиля:

Последнее, что нам нужно сделать, это сделать возможным выход из системы. Это достигается простой установкой идентификатора пользователя на null, удаляя его. Все, что требуется, — одна простая функция:

Итак, мы только что вошли в систему в первый раз. С чем мы встречаемся?

Неплохо, неплохо, хотя этот «образец файла» не создается из нашей базы данных, он статичен. Мы скоро исправим это, но сначала нам нужно изменить разрешения папки «файл», чтобы Codeigniter мог читать и писать в нем. Я изменил на 777:

Теперь, когда все в порядке, давайте вернемся к коду! Нам нужно загрузить все файлы пользователей из базы данных, и для этого нам понадобится .

. модель! Однако на этот раз мы создадим ее в файле files.php , чтобы разделить таблицы users и files.. Вставьте эту функцию:

Это было проиллюстрировано в предыдущих разделах этого руководства, поэтому вы должны все понимать. В основном, функция получает все строки, в которых владелец = идентификатор пользователя, и возвращает их в симпатичном массиве объектов. Давайте создадим что-то в контроллере профилей для взаимодействия с ним и передадим информацию на просмотр. Измените функцию index следующим образом:

Опять же, очень простая функция. Она принимает результаты, переданные ей из модели файлов, и упаковывает их в представление. Codeigniter передает данные в представление обычно через массив (в данном случае данные). Затем он автоматически раскладывает массив на множество переменных, поэтому, когда мы перейдем к представлению, он сможет получить доступ к результатам базы данных через $file, а не $data[‘file’]. Давайте поместим этот прекрасный результат базы данных в представление! Вставьте это в ‘profile.php’, заменяя код, о котором говорит вам комментарий HTML.

Цикл foreach загружает каждую строку массива поочередно и делает ее доступной через объект $file. Затем, используя образец «section» в качестве шаблона, заполните все ссылки и имя с информацией для нового объекта $file. Мы увидим как работает как функция удаления чуть позже, и как работает ссылка просмотра после того, как мы что-то загрузили.

Если вы откроете это в своем браузере сейчас, вы ничего не увидите. Это потому, что у нас нет загруженных файлов! Ну, нам нужно это исправить, поэтому нам нужно создать форму для загрузки. Давайте сначала сделаем контроллер; откройте ‘profile.php’ и добавьте эту функцию:

Эта функция добавляет немало новых вещей: особенно обработка файлов Codeigniter. Все начинается довольно просто, проверяя, была ли форма отправлена путем поиска файла. Если файл не существует, он просто показывает представление загрузки (которое мы будем обновлять далее). Если файл существует, то он считывает временный файл, который был сгенерирован сервером. Каталог временного файла можно найти в $_FILES[‘your_file‘][‘tmp_name’], и файл можно прочитать из этого каталога через функцию read_file Codeigniter. Она загружает всю информацию о файлах в переменную $file.

Следующая строка получает имя файла из глобальной переменной $_FILES аналогично получению временного каталога. Вооружившись этими двумя частями информации, codeigniter записывает файл в папку с файлами в том же каталоге, что и файл index. Наконец, файл необходимо добавить в базу данных. Опять же, мы собираемся сделать это с помощью модели, на этот раз функция add в модели files. Мы скоро увидим, как это работает, но теперь нам нужно создать форму загрузки в представлении. Добавьте это в ‘upload.php’ где комментарий HTML говорит вам:

Замените текущий HTML этим. Важно отметить, что при загрузке файлов мы используем файл input type=file, который позволяет нам выбирать файл для загрузки. Кроме того, мы должны указать enctype в нашем теге формы, чтобы сервер знал, что он получает файл и сохраняет его. Для нас это не слишком интересные нюансы, но это очень важно! Давайте быстро посмотрим, что мы создали:

Теперь мы переходим к финальному сценарию загрузки файлов, к модели. Это добавляет файл в базу данных с его именем и владельцем, чтобы сервер знал, кому какие файлы принадлежат. Давайте взглянем; добавьте это в свою модель файлов:

Снова используя Codeigniter Active Record, мы добавляем строку в базу данных с именем файла и владельца. Мы получаем владельца путем получения идентификатора пользователя из данных сеанса, которые мы сохранили ранее при входе в систему. В целом, довольно простая функция. Попробуем загрузить красивую фотографию, а?

Просматривая папку «files», мы видим, что файл, который мы загрузили, появился там, как по волшебству (магия Codeigniter!), И мы видим, почему работает ссылка просмотра, поскольку она просто указывает непосредственно на файл в каталоге. При этом все, что осталось сделать в этой статье — это удаление файлов.

Хорошо, последний бит. Это не займет много времени, так как вы сможете использовать идеи, которые вы узнали ранее. Сначала мы добавим этот код в наш контроллер профилей:

И этот код для нашей модели файлов:

Первый контроллер должен быть очень понятен. Он вызывает функцию удаления из модели файлов (которую мы определили), которая генерирует имя файла. Затем он использует базовую функцию PHP для удаления файла с этим именем в каталоге файлов. Наконец, он отправляется обратно в профиль пользователя (у которого теперь минус один файл).

Модель немного сложнее. Она должна вернуть имя файла, а также удалить его, поэтому сначала она запрашивает базу данных для получения сведений о файлах. Затем загружает это в переменную $result, а затем переходит к удалению файла. Затем она возвращает столбец «имя» первой строки массива (единственная строка, возвращаемая запросом), которая затем используется в вышеуказанном контроллере.

Ура! Это сработало. Наверное, мы все закончили!

Конечно, этот код не должен запускаться на сервере без каких-либо серьезных улучшений. Вот несколько основных проблем:

  • Все пароли незашифрованы. Это означает, что если кто-то сможет проникнуть в вашу базу данных, они с минимальными усилиями смогут украсть все данные ваших пользователей. Уверен, что вы все согласитесь, что это нехорошо. Это легко решить, добавив несколько простых функций хэширования к паролям.
  • Файлы не являются частными. Пользователь может захотеть убедиться, что файлы, которые они загружают, видны только им, а не кем-то, кто просто может угадать кучу URL-адресов. Для этого, вероятно, потребуется другой контроллер для обслуживания файлов (который проверяет данные сеанса).
  • Сценарий не проверяет наличие файлов перед записью файлов. Это может привести к конфликтам с вашими файлами или может привести к перезаписи файлов. Как бы то ни было: это нехорошо. Это можно решить с помощью простой проверки БД, чтобы убедиться, что файл не был занят или можно предоставить пользователям собственные каталоги в папке с файлами.
  • Никакие ошибки не генерируется. Это не помогает пользователю узнать, что они делают неправильно, и хотя это не слишком большая проблема на таком маленьком сайте с таким ограниченным функционалом, это все равно можно улучшить.

В общем, вы создали довольно мощное небольшое веб-приложение, особенно благодаря небольшому количества кода, который вам нужно было написать. По своей природе Codeigniter довольно просто расширить, как для решения вышеуказанных проблем, так и для добавления новых функций, таких как переименование файлов. Я также надеюсь, что в этом уроке вы немного научились использовать концепции MVC и силу, которую они приносят: просто скорректировав модели в нашем приложении, мы можем обменять нашу БД на текстовые файлы, XML или что угодно, а также изменив представления , мы можем полностью поменять внешний вид без нарушения функциональности. Удивительно!

  • Подпишитесь на RSS-канал NETTUTS для получения ежедневных новостей о веб-разработке.

При подготовки статьи использованы следующие источники:

http://vseohostinge.ru/uroki-sovety/manualy-po-2domainsru/registrator-2domains-znakomstvo-s-panelyu-upravleniya

http://pupi-boy.ru/domen-hosting/perenos-domena-ru-k-drugomu-registratoru.html

http://wordpressmania.ru/kak-prikrepit-domen-v-2domains-k-hostingu-beget/

http://richhost.biz/kak-privyazat-domen-k-hostingu.html

http://www.reg.ru/support/hosting-i-servery/sajty-i-domeny/kak-nastroit-dns/kak-privyazat-domen-k-hostingu

http://webformyself.com/kak-privyazat-domen-k-xostingu/

http://wrart.ru/vidy-zarabotka/3-mesyatsa-besplatnogo-hostinga-ot-mchost.html

http://seoslim.ru/host/xosting-3-mesyaca-besplatno.html

http://ideafox.ru/pro-blog/3-month-hosting.html

http://wrart.ru/vidy-zarabotka/3-mesyatsa-besplatnogo-hostinga-ot-mchost.html

http://online-elite.ru/zarabotok-online/saytostroyeniye/razmestit-neskolko-saitov

http://www.garagebiz.ru/view/skolko_sajtov_mozhno_razmestit_na_odnom_hostinge/seo

http://online-elite.ru/zarabotok-online/saytostroyeniye/razmestit-neskolko-saitov

http://lessons-business.ru/dva-domena-na-odnom-khostinge.html

http://ru.hostings.info/hostings/rating/testovyj-period-hosting

http://start-luck.ru/sozdanie-sayta/khostingov-s-testovym-periodom.html

http://denezhnye-ruchejki.ru/301-redirekt-na-hostinge-offerhost/

http://fb.ru/article/242507/kak-nastroit-redirekt-cherez-htaccess-pravilnaya-nastroy-kak-redirekta-v-joomla-i-drugih-cms

http://www.myarena.ru/

http://ourservers.ru/

http://www.hostinger.ru/rukovodstva/kak-ispravit-oshibku-403-forbidden-error

http://komp.guru/oshibki/kak-ispravit-oshibku-403-kotoraya-zapreshhaet-dostup-k-sajtu.html

http://www.hostinger.ru/rukovodstva/kak-ispravit-oshibku-403-forbidden-error

http://sdelaicomp.ru/nastrojka-sistemy/403-forbidden-chto-eto-i-kak-ispravit.html

http://www.reg.ru/support/hosting-i-servery/sajty-i-domeny/moy-sayt-ne-rabotaet/oshibka-403

http://toster.ru/q/477262

http://www.hostinger.ru/rukovodstva/413-request-entity-too-large/

http://ruphp.com/entity-too-large-413.html

http://socpravo.ru/xosting-za-kopejki-50-rublej-v-mesyac-dlya-sajta-vizitki/

http://ru.hostings.info/hostings/rating/deshevyj-hosting

http://www.gameserverkings.com/games/7-days-to-die-server-hosting/

http://www.gtxgaming.co.uk/7-days-die-server-hosting/

http://www.gtxgaming.co.uk/7-days-die-server-hosting/

http://www.gameserverkings.com/games/7-days-to-die-server-hosting/

http://www.reg.ru/support/domains/dns_servery_i_nastroika_zony/Nastroika-zony/kak-dobavit-zapis-a-poddomen

http://www.reg.ru/support/domains/dns_servery_i_nastroika_zony/Nastroika-zony/nastroika-resursnyh-zapisei-dlya-domena

http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358480

http://romanchueshov.ru/bez-rubriki/kak-privyazat-domen-k-hostingu-timeweb.html

http://lifehacki.ru/oshibka-access-denied-for-user-rootlocalhost-using-password-yes-i-no/

http://qaru.site/questions/218155/1045-access-denied-for-user-rootlocalhost-using-password-yes

http://www.1gb.ua/wiki/index.php?title=%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D0%91%D0%94_mySQL_%D0%B8%D0%B7_Microsoft_Access

http://webformyself.com/kak-sozdat-bazu-dannyx-na-xostinge/

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://rusmuse.ru/archives/1453

http://creatura.club/lessons/hosting/kak-poluchit-besplatnyy-hosting-i-domen-dlya-adobe-muse-r57/

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://rusmuse.ru/archives/1453

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://muwilab.ru/vozmojno-li-sajt-na-muse-perenesti-na-druguyu-platformu.html

http://htmleditors.ru/List3B/adobe_muse_help/publish.html

http://helpx.adobe.com/ru/muse/using/publishing-websites.html

http://helpx.adobe.com/ru/muse/using/uploading-site-third-party-hosting.html

http://rusmuse.ru/archives/1453

http://creatura.club/lessons/hosting/kak-poluchit-besplatnyy-hosting-i-domen-dlya-adobe-muse-r57/

http://rusmuse.ru/archives/1453

http://today-life.ru/zarabotok-v-seti/kak-posmotret-doxod-na-youtube.html

http://suay.ru/?p=221

http://searchengines.guru/archive/index.php/t-800238.html

http://suay.ru/?p=221

http://searchengines.guru/archive/index.php/t-406016.html

http://lpgenerator.ru/blog/2012/11/15/privyazka-domena-i-poddomena-v-paneli-agavaru/

http://tods-blog.com.ua/software/ai-bolit/

http://revisium.com/ai/faq.php

http://forum.php.su/topic.php?forum=40&topic=4423

http://qaru.site/questions/459285/delete-ajax-works-in-localhost-but-doesnt-in-production-hosting

http://takprostotak.ru/joomla/kak-perenesti-sajt-sozdanyj-na-cms-joomla-bekap-sajta-akeeba-backup.html

http://sitogon.ru/dlya-tech-kto-delaet-internet/akeeba-backup-rezervnoe-kopirovanie-i-perenos-saytov-na-joomla

http://normalnet.ru/sajt-na-joomla/perenos-joomla-3-na-hosting.html

http://www.inforeks.ru/cms/27-joomla-na-server.html

http://takprostotak.ru/joomla/kak-perenesti-sajt-sozdanyj-na-cms-joomla-bekap-sajta-akeeba-backup.html

http://sitogon.ru/dlya-tech-kto-delaet-internet/akeeba-backup-rezervnoe-kopirovanie-i-perenos-saytov-na-joomla

http://normalnet.ru/sajt-na-joomla/perenos-joomla-3-na-hosting.html

http://www.inforeks.ru/cms/27-joomla-na-server.html

http://www.inforeks.ru/cms/27-joomla-na-server.html

http://joofaq.ru/sozdanie-sayta-na-joomla-1-5/ustanovka-i-nastroyka/20-perenos-sayta-joomla-s-lokalnogo-servera-na-virtualniy-chosting

http://joomla.center/baza-joomla/zaschita-joomla/akeeba-backup-manual

http://takprostotak.ru/joomla/kak-perenesti-sajt-sozdanyj-na-cms-joomla-bekap-sajta-akeeba-backup.html

http://takprostotak.ru/joomla/kak-perenesti-sajt-sozdanyj-na-cms-joomla-bekap-sajta-akeeba-backup.html

http://joofaq.ru/sozdanie-sayta-na-joomla-1-5/ustanovka-i-nastroyka/20-perenos-sayta-joomla-s-lokalnogo-servera-na-virtualniy-chosting

http://normalnet.ru/sajt-na-joomla/perenos-joomla-3-na-hosting.html

http://www.inforeks.ru/cms/27-joomla-na-server.html

http://www.amiro.ru/forum/hosting-for-amiro-cms/peremestit-na-drugoj-hosting

http://unihost.com/help/ru/how-to-move-amiro-cms-to-web-hosting/

http://www.hostinger.ru/besplatnyj-hosting

http://ru.hostings.info/hostings/rating/free-hosting

http://www.hostinger.ru/besplatnyj-hosting

http://ru.hostings.info/hostings/rating/free-hosting

http://koskomp.ru/sozdanie-saytov/besplatnye-domeny-dlya-sayta-2-i-3-urovnya-ru-tk-com/

http://oblomow.ru/free-domains/

http://ktonanovenkogo.ru/vokrug-da-okolo/hosting/varianty-besplatnyx-xostingov-dlya-vashix-sajtov-bez-navyazchivoj-reklamy-no-s-podderzhkoj-yazyka-php-i-baz-dannyx-mysql.html

http://www.redz.ru/hosting/free/

http://ru.stackoverflow.com/questions/589053/apache-ssl-https-%D0%B4%D0%BB%D1%8F-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85-%D1%85%D0%BE%D1%81%D1%82%D0%BE%D0%B2

http://www.digitalocean.com/community/tutorials/apache-ubuntu-14-04-lts-ru

http://afirewall.ru/nastrojka-virtualnyx-xostov

http://macrodmin.ru/2019/01/apache-ip-based-and-name-based-virtual-hosting/

http://www.hostland.ru/articles/hosting_apache

http://www.hostinger.ru/rukovodstva/web-server-apache/

http://www.8host.com/blog/ustanovka-alternative-php-cache-apc-na-server-ubuntu-12-04/

http://sitear.ru/material/apc-php

http://ark-hoster.ru/reviews/

http://ark-game.ru/guids/106-svoy-server-arksurvival-evolved.html

http://ark-hoster.ru/reviews/

http://www.myarena.ru/game_ark.html

http://folive.ru/

http://folive.ru/data-center/

http://shiftoffproblem.com/free-hosting-for-asp-net/

http://www.reg.ru/hosting/windows

http://www.ps.kz/hosting/shared

http://pickuphost.ru/shared/free-web-hosting/kazahstan/

http://www.linux.org.ru/forum/web-development/13227568

http://www.sql.ru/forum/648168/linux-hosting-s-podderzhkoy-asp-net

http://owlweb.ru/xosting-asp-net/

http://webdiz.com.ua/chto-takoe-hosting-aspnet/

http://invest4net.ru/webmasteram/besplatnyj-hosting-ot-beget-bez-reklamy.html

http://opartnerke.ru/obzor-besplatnyh-hostingov-bez-reklamy/

http://seoblog.life/domeny-i-hostingi/beget-nastrojka-pochty.html

http://zaurmag.ru/polezny-e-sovety/pochta-na-svoem-domene.html

http://vseohostinge.ru/vse-o-hostinge/beget/tri-sposoba-registratsii-domena-na-beget

http://beget.com/ru/articles/razmeshenie_saita

http://wordpressmania.ru/sozdanie-bloga-na-hostinge-beget-i-ustanovka-cms-wordpress/

http://beget.com/ru/manual/domains

http://wordpressmania.ru/kak-privyazat-domen-k-hostingu-beget/

http://hosters.ru/beget/otzyvi.html

http://masalkin.name/hosting-beget-moj-negativny-j-otzy-v/

http://beget.com/ru/faq/host_transfer

http://www.shoogr.ru/2016/02/kak-perenesti-sajt-wix-na-drugoj-hosting.html

http://bloginfo.biz/beget-hosting.html

http://alzari.ru/beget-ru-hosting.html

http://ammo1.livejournal.com/752487.html

http://site-builders.ru/hosting-beget

http://www.bestseoblog.ru/kak-pravilno-vybrat-xosting-dlya-internet-magazina/

http://ru.hostings.info/hostings/rating/internet-magazin-hosting

http://beget.com/ru/articles/razmeshenie_saita

http://beget.com/ru/faq/host_transfer

http://inetsovety.ru/kak-sozdat-sayt-na-hostinge-beget/

http://investobox.ru/poshagovaya-instrukciya-sozdaniya-sajta/

http://site-builders.ru/hosting-beget

http://seoslim.ru/host/beget-deshevyj-kachestvennyj-xosting-registraciya-otzyvy.html

http://seo911.su/betheme-tema-wordpress-s-bolshoj-bukvy/

http://hostenko.com/wpcafe/themes/betheme/

http://jehost.ru/cms/ustanovka-bitrix-na-hosting.html

http://hostiq.ua/wiki/bitrix-installation/

http://bx-cert.ru/certification/bitrix/26/

http://aposnov.ru/dhydhunedhudhdhn-ndhdhndh-dh-dhdhdhdhndhne-dhnedhdhdhdhdhdhdhndhudhnoedhdhnndh/

http://btrxboost.com/help/832

http://wiki.support.by/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9:%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%B1%D0%B8%D1%82%D1%80%D0%B8%D0%BA%D1%81_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F

http://reset.name/bitrix/perenos-bitrix-vruchnuju-s-poddomenom-mobilnoj-versii-ili-na-drugoj-domen/

http://www.reg.ru/support/hosting-i-servery/perenos_saitov/kak-perenesti-sayt-na-1s-bitriks-na-drugoy-khosting

http://tuning-soft.ru/articles/bitrix/transfer-bitrix-site-to-another-hosting.html

http://www.reg.ru/support/hosting-i-servery/perenos_saitov/kak-perenesti-sayt-na-1s-bitriks-na-drugoy-khosting

http://tuning-soft.ru/articles/bitrix/backup-bitrix.html

http://abraxabra.ru/blog/bitrix-zametki/backup-site-1c-bitrix/

http://jehost.ru/cms/ustanovka-bitrix-na-hosting.html

http://petersburg-studio.com/blog/ustanovka-1c-bitrix

http://webformyself.com/kak-ustanovit-bootstrap/

http://freelancehunt.ru/project/sozdat-sayt-na-bootstrap/243786.html

http://q2e.ru/servercfg/37-ustanovka-bungeecord.html

http://zorotex.org/page/bungeecord

http://biznessystem.ru/perenos-sajta-na-drugoj-hosting/

http://ru.hostings.info/schools/kak-perenesti-sayt-ot-drugogo-provaydera.html

http://www.cloudlinux.com/ru/cagefs

http://linux-notes.org/vklyuchit-cagefs-dlya-pol-zovatelej-cpanel/

http://gamearmy.ru/monitoring/game_4

http://www.gamer.ru/call-of-duty-2/16950

http://steamcommunity.com/groups/Kaluga_Org

http://call-of-duty-4.ru.softonic.com/

http://gaming.stackexchange.com/q/86525

http://www.elitegameservers.net/game-servers/call-of-duty-4-modern-warfare-game-server-hosting

http://bitte.net.ua/hosting-serverov-cod4.htm

http://it-ground.net/forum/threads/21347/

http://host4game.ru/catalog/minecraft-besplatnyy

http://www.hostinger.ru/besplatnyj-hosting

http://forum.myarena.ru/index.php?/topic/11161-kak-stavit-mody-na-vash-server/

http://minecraftgo.ru/servers/1141-gayd-kak-sozdat-server-minecraft-1710-s-modami-spigot-cauldron-mcpc.html

http://www.dmosk.ru/instruktions.php?object=hosting

http://serveradmin.ru/centos-7-nastroyka-servera/

http://apkpure.com/ru/cloudbunny-hosting-panel/com.cloudbunny.net

http://moonback.ru/page/free-hosting-panel

http://modxinfo.ru/modx-setup

http://blogwork.ru/ustanovka-modx-revolution-na-xosting/

http://cmsplugin.ru/page/cms-hosting

http://www.hostland.ru/cms

http://cmsplugin.ru/page/cms-hosting

http://www.hostland.ru/cms

http://life-crazy.ru/besplatnye-xostingi-dlya-sozdaniya-svoix-sajtov.html

http://cmsplugin.ru/page/cms-hosting

http://cmsplugin.ru/page/cms-hosting

http://fozzy.com/ru/cms.shtml

http://gamecms.ru/

http://vk.com/enginegamespanel

http://www.nic.ru/help/kakoj-hosting-vybrat6_6749.html

http://1ps.ru/blog/sites/hosting-domen-cms/

http://cmsplugin.ru/page/cms-hosting

http://www.hostland.ru/cms

http://cmsplugin.ru/page/cms-hosting

http://www.hostland.ru/cms

http://thehost.ua/wiki/install-wordpress

http://moguta.ru/blog/delaem-internet-magazin-vmeste/kak-ustanovit-cms-na-hosting

http://1ps.ru/blog/sites/hosting-domen-cms/

http://www.nic.ru/help/kakoj-hosting-vybrat6_6749.html

http://www.hostinger.ru/rukovodstva/rukovodstvo-po-codeigniter/

http://code.tutsplus.com/ru/tutorials/creating-a-file-hosting-site-with-codeigniter—net-3534