- •Разработка приложений для Web-сервера (без работы с бд)
- •Цель работы
- •Содержательная и формальная постановки задачи
- •Содержательная постановка задачи
- •Формальная постановка задачи
- •Языки разметки, программирования и каскадные таблицы стилей
- •Протокол передачи данных
- •Подходы к построению интерфейсов web-приложений
- •Структура решения
- •Генерация html-страниц
- •Обмен данными между клиентом и сервером
- •Реализация логики приложения
- •Обзор и анализ методов решения
- •Генерация html-страниц
- •Хранение данных на сервере и доступ к ним
- •Обмен данными между клиентом и сервером
- •Реализация логики приложения
- •Описание реализации применяемых методов
- •Хранение данных на сервере и доступ к ним, используемые переменные
- •Укрупненный алгоритм
- •Определить, свободен ли данный логин
- •Определить, совпадают ли логин и пароль с учетной записью
- •Создание новой учетной записи
- •Сохранение в файл новой записи
- •Редактирование записей
- •Удаление записей
- •Реализация логики приложения
- •Укрупненный алгоритм
- •Регистрация пользователя
- •Используемые функции и конструкции языка
- •Структура файлов
- •Руководство пользователя
Удаление записей
del_post(int i), где
i – индекс записи.
Поместим содержимое файла comments.txt в массив file
file = file('comments.txt');
Удаляем нужную строку
unset(file[i]);
Перезаписываем файл
file_put_contents("comments.txt", implode("", file));
Реализация логики приложения
Алгоритмы логики приложения тесно связаны с доступом к ресурсам и могут использовать функции, определенные в предыдущем разделе. Задачи формирования страницы также тесно связаны с логикой приложения, однако не входят в нее, поэтому алгоритм формирования и вывода не будет детализирован. Запись "Сформировать и вывести страницу ..." лишь указывает, какие изменения должны быть представлены пользователю приложения после выполнения очередного логического действия. При детализации заменим эти записи на "put_page(...)" - функцию отправки некоторой страницы клиенту.
Обозначим Session - глобальный ассоциативный массив, в котором хранятся текущие данные аутентификации. Он доступен в любой части программы.
Будем использовать следующие стандартные функции:
empty(string) – проверяем строку на «пустоту»,
exit – выводит сообщение и прекращает выполнение скрипта.
Далее приведены алгоритмы подзадач:
Укрупненный алгоритм
Регистрация пользователя
Входные параметры: login – логин, password – пароль.
Если (empty(login) or empty(password)) то
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
иначе
если (is_login_free(login)) то
register(login, password);
put_page(…);
конец
конец
Вход
Входные параметры: login – логин, password – пароль.
Если (empty(login) or empty(password))
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
иначе
если (enter(login, password)) то
если (login = “admin”)
Session[1] = “admin”;
Session[2] = login;
put_page(…);
иначе
Session[1] = “user”;
Session[1] = login;
put_page(…);
конец
конец
конец
Добавление записи
Входной параметр post – запись.
send_post(Session[2],post);
put_page(…);
Редактирование записи
Входные параметры i – индекс записи и new_post – отредактированная запись
edit_post(int i, string new_post);
put_page(…);
Удаление записи
Входные параметры i – индекс записи.
del_post(int i);
put_page(…);
Руководство программиста
Сервер
Приложение писалось на локальном Web-сервере – Denwer, обладающем следующими характеристиками (все компоненты ставятся автоматически):
Сервер – Apache 2.2.22 + SSL
Язык – PHP 5.3.13
База данных – MySQL 5.5
Хранение данных в приложении реализовано без базы данных.
Используемые функции и конструкции языка
Опишем все стандартные функции PHP, используемые в приложении.
Метод |
Описание |
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
filename - Путь к файлу
flags - В качестве необязательного параметра flags может можно указать одну или более следующих констант FILE_USE_INCLUDE_PATH Ищет файл в include_path. FILE_IGNORE_NEW_LINES Не добавлять новую строку к концу каждого элемента массива FILE_SKIP_EMPTY_LINES Пропускать пустые строки
Context - Ресурс контекста, созданный функцией stream_context_create(). |
Возвращает файл в виде массива. Каждый элемент массива соответствует строке файла, с символами новой строки включительно. В случае ошибки file() возвращает FALSE. |
array explode ( string $delimiter , string $string [, int $limit ] )
delimiter - Разделитель.
string - Входная строка.
limit - Если аргумент limit является положительным, возвращаемый массив будет содержать максимум limit элементов, при этом последний элемент будет содержать остаток строки string. |
Возвращает массив (array) строк (string), созданный делением параметра string по границам, указанным параметром delimiter.
Если delimiter является пустой строкой (""), explode() возвращает FALSE. Если delimiter не содержится в string, и используется отрицательный limit, то будет возвращен пустой массив (array), иначе будет возвращен массив, содержащий string. |
resource fopen ( string $filename , string $mode)
Если PHP установлено, что filename указывает на локальный файл, тогда выполняется попытка открыть поток к этому файлу.
mode - Параметр mode указывает тип доступа, который вы запрашиваете у потока. 'r' - Открывает файл только для чтения; помещает указатель в начало файла. 'w' - Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать. 'a' - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. |
закрепляет именованный ресурс, указанный в аргументе filename, за потоком. |
int fwrite ( resource $handle , string $string [, int $length ] )
handle - Указатель (resource) на файл, обычно создаваемый с помощью функции fopen().
string - Записываемая строка.
length - Если передан аргумент length, запись остановится после того, как length байтов будут записаны или будет достигнут конец строки string, смотря что произойдёт первым. |
fwrite() записывает содержимое string в файловый поток handle.
fwrite() возвращает количество записанных байт или FALSE в случае ошибки. |
bool fclose ( resource $handle )
handle - Дескриптор должен быть корректным и указывать на файл, открытый ранее с помощью функции fopen() или fsockopen(). |
Функция закрывает файл, на который указывает дескриптор handle. |
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
string - Строка заголовка.
replace - Необязательный параметр replace определяет, надо ли заменять предыдущий аналогичный заголовок или заголовок того же типа. По умолчанию заголовок будет заменен, но если передать FALSE, можно задать несколько однотипных заголовков. Например:
http_response_code - Принудительно задает код ответа HTTP. Следует учитывать, что это будет работать, только если строка string не является пустой. |
header() используется для отправки HTTP заголовка. В » спецификации HTTP/1.1 есть подробное описание HTTP заголовков.
Помните, что функцию header() можно вызывать только если клиенту еще не передавались данные. То есть она должна идти первой в выводе, перед ее вызовом не должно быть никаких HTML тэгов, пустых строк и т.п. Довольно часто возникает ошибка, когда при чтении кода файловыми функциями, вроде include или require, в этом коде попадаются пробелы или пустые строки, которые выводятся до вызова header(). Те же проблемы могут возникать и при использовании одиночного PHP/HTML файла. |
bool file_exists ( string $filename )
filename - Путь к файлу или каталогу. |
Возвращает TRUE, если файл или каталог, указанный параметром filename, существует, иначе возвращает FALSE. |
bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false]] )
pathname - Путь к директории.
mode - По умолчанию принимает значение 0777, что означает самые широкие права. Больше информации о режимах доступа можно узнать на странице руководства функции chmod().
recursive - Разрешает создание вложенных директорий, указанных в pathname. |
Пытается создать директорию, заданную в pathname. Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. |
bool is_numeric ( mixed $var )
var - Проверяемая переменная. |
Возвращает TRUE, если var является числом или строкой, содержащей число, в противном случае возвращается FALSE. |
bool unlink ( string $filename )
filename - Путь к файлу. |
Удаляет файл filename. Функция похожа на функцию unlink() Unix C. В случае ошибки будет сгенерирована ошибка уровня E_WARNING. |
void echo ( string $arg1 [, string $... ] )
|
Выводит все аргументы.
На самом деле echo - это не функция, а конструкция языка, поэтому заключать аргументы в скобки необязательно. |
