- •Разработка приложений для Web-сервера (без работы с бд)
- •Цель работы
- •Содержательная и формальная постановки задачи
- •Содержательная постановка задачи
- •Формальная постановка задачи
- •Языки разметки, программирования и каскадные таблицы стилей
- •Протокол передачи данных
- •Подходы к построению интерфейсов web-приложений
- •Структура решения
- •Генерация html-страниц
- •Обмен данными между клиентом и сервером
- •Реализация логики приложения
- •Обзор и анализ методов решения
- •Генерация html-страниц
- •Хранение данных на сервере и доступ к ним
- •Обмен данными между клиентом и сервером
- •Реализация логики приложения
- •Описание реализации применяемых методов
- •Хранение данных на сервере и доступ к ним, используемые переменные
- •Укрупненный алгоритм
- •Определить, свободен ли данный логин
- •Определить, совпадают ли логин и пароль с учетной записью
- •Создание новой учетной записи
- •Сохранение в файл новой записи
- •Редактирование записей
- •Удаление записей
- •Реализация логики приложения
- •Укрупненный алгоритм
- •Регистрация пользователя
- •Используемые функции и конструкции языка
- •Структура файлов
- •Руководство пользователя
Реализация логики приложения
Логика приложения реализуется в серверных скриптах, подходы к написанию которых были рассмотрены в пункте 5.1 ( Генерация HTML-страниц). С учетом того, что данные хранятся в файлах, очевидно, что для реализации логики приложения будет достаточно базовых функций работы с файлами и строками. Такие библиотеки имеются практически в любом языке программирования, соответственно, и во всех языках, перечисленных в пункте 5.1. Ввиду простоты и высокой обеспеченности учебным материалом, для реализации логики приложения а также генерации HTML-страниц был выбран язык PHP.
Логика приложения неразрывно связана с генерацией HTML-страниц, так как выполнение каждой логической задачи завершается выводом ее результатов. Далее приведены обобщенные алгоритмы для решения подзадач:
Регистрация пользователя
Получены логин, пароль.
Если можно зарегистрировать пользователя с такими данными
Зарегистрировать пользователя
Сообщить об успешной регистрации
Иначе
Сформировать и вывести страницу с формой регистрации и текстом соответствующей ошибки
Вход
Получены логин, пароль.
Если учетная запись с такими логином и паролем существует
Сохранить логин и права как текущие
Если это пользователь
Сформировать и вывести страницу, предназначенную для пользователя
Иначе
Сформировать и вывести страницу, предназначенную для администратора
Иначе
Сформировать и вывести страницу с формой входа и текстом соответствующей ошибки
Добавление записи
Получена запись. Известен текущий логин.
Сохранить в файл новую запись
Если запись сохранена
обновить страницу
Иначе
Сформировать и вывести страницу с текстом соответствующей ошибки
Редактирование записи
Получен индекс записи. Известен текущий логин.
Проверить записи на наличие обновлений
Цикл по всем строкам/записям
Если есть изменения
Перезаписать строку
Обновить страницу
Удаление записи
Получен индекс записи. Известен текущий логин.
Удалить строку по индексу из файла.
Обновить страницу.
Описание реализации применяемых методов
В данном разделе описана реализация только тех задач, которые требуют алгоритмического решения. Генерация HTML-страниц и обмен данными между клиентом и сервером не требуют алгоритмического решения в рамках данного приложения.
Хранение данных на сервере и доступ к ним, используемые переменные
Информацию с помощью файлов структурируем следующим образом:
Файл users.txt будет хранить логины и пароли пользователей через пробел в каждой строке.
Файл comments.txt будут хранить логин пользователя и содержание его записи через «~».
Ниже приведена реализация наименее тривиальных подзадач, определенных на этапе обзора и анализа методов решений. Для решения каждой подзадачи определена соответствующая функция.
В реализации подзадач используются некоторые распространенные функции для работы с файлами и строками:
file fopen(string path, string mode) - открывает файл по адресу path в режиме mode, где
r - открытие на чтение,
w - открытие на запись, содержимое файла удаляется, если файла не существует создается новый,
+ - открытие на чтение и запись,
a - открытие на дозапись, информация добавляется в конец файла, возвращает указатель на файл,
bool fclose(file fp) - закрывает файл, возвращает true в случае успешного закрытия и false в случае возникновения ошибки,
string fgets(file fp) - читает строку из файлового указателя, указатель перемещается в начало следующей строки,
int fwrite(file fp,string str) - записывает в файл строку str, возвращает число записанных байт,
string[] file(string path) - читает файл по адресу path и помещает его содержимое в массив строк,
int filesize(string filename) - возвращает размер файла в байтах,
int strlen(string str) - возвращает длину строки str,
string substr(string str, int start, int length) - возвращает подстроку str начиная с символа под номером start длиной length,
string[] explode(string delimiter, string str, int limit) - разбивает строку str по подстроке delimiter максимум на limit строк, причем последний элемент массива содержит остаток строки str,
string implode(string glue, string[] pieces) - склеивает элементы массива pieces в одну строку с помощью строки glue,
string trim(string str) - удаляет пробелы, знаки табуляции, перевода строки, возврата каретки и некоторые другие служебные символы из начала и конца строки.
bool feof(file fp) – проверяет, достигнут ли конец файла.
PHP_EOL(string) – корректный символ конца строки.
file_put_contents(file fp, join('', string str)) – пишет строку str в файл.
Предполагается, что они реализованы в стандартных библиотеках языка. В случае отсутствия некоторых из ник не составляет труда реализовать из самомтоятельно.
