Лабораторная работа №3. Создание тестовой системы и счетчика посещений страницы средствами CGI и PHP
Задание:
Создать каталог [диск с меткой User]:\infocom.
Установить web-сервер Apache в каталог [диск с меткой User]:\infocom\Apache2.2 как консольное приложение, а не как сервис.
Установить PHP в каталог [диск с меткой User]:\infocom\php.
Настроить файлы httpd.conf и php.ini (см. презентацию в файле apache+php.ppt)
Во всех вариантах задания необходимо разработать CGI-модуль и PHP-скрипт.
ОПРЕДЕЛИТЬ СКОРОСТЬ РАБОТЫ CGI-МОДУЛЯ И PHP-СКРИПТА.
Вариант 1
CGI. Проверка знания правил дорожного движения и текстовый счетчик посещения страницы.
PHP. Проверка знаний правил дорожного движения с записью результатов прохождения теста разными пользователями в файл и вывода результатов в виде диаграммы.
Вариант 2
CGI. Проверка знания таблицы умножения и текстовый счетчик посещения страницы.
PHP. Проверка знания таблицы умножения с записью результатов прохождения теста разными пользователями в файл и вывода результатов в виде диаграммы.
Вариант 3
CGI. Любой психологический тест и текстовый счетчик посещения страницы.
PHP. Любой психологический тест и вывод результатов в виде таблицы с сортировкой по убыванию или возрастанию. При повторном входе пользователя вывод его предыдущего результата.
Вариант 4
CGI. Проверка знания языка HTML и текстовый счетчик посещения страницы.
PHP. Проверка знания языка HTML с тематическими вопросами и вывод результатов с процентами успешных ответов по каждой теме.
Вариант 5
CGI. Экзамен по дисциплине и текстовый счетчик посещения страницы.
PHP. Экзамен по дисциплине и в результате вывод не только оценки, но и перечня тем с большинством неправильных ответов. Вывод результата по темам в виде диаграммы.
Вариант 6
CGI. Проверка знания словарного запаса (англ. или нем. или франц.) и текстовый счетчик посещения страницы.
PHP. Проверка знания словарного запаса (англ. или нем. или франц.) с записью результатов прохождения теста разными пользователями в файл и вывода результатов в виде диаграммы.
Вариант 7
CGI. Проверка знания таблицы умножения и текстовый счетчик посещения страницы.
PHP. Выбор учебных курсов из предлагаемого перечня и формирование расписания занятий. Первоначально предлагается перечень всех курсов и все свободные дни недели. Затем выбранный курс из списка удаляется, и день недели помечается как занятый выбранным курсом. Скрипт прекращает работу, когда все дни недели заняты и расписание сохраняется в файле, который можно скачать по ссылке.
Вариант 8
CGI. Любой психологический тест и текстовый счетчик посещения страницы.
PHP. Проверка таблицы умножения с ограничением по времени на каждый ответ. Вывод итогового результата для разных пользователей в виде диаграммы.
Вариант 9
CGI. Проверка знания языка HTML и текстовый счетчик посещения страницы.
PHP. Вывод отдельных слов иностранного языка, из которых нужно построить фразу по правилам. Рядом с каждым словом поле, в котором можно определить порядковый номер слова во фразе. Предусмотреть кнопку помощи для решения задачи. Предусмотреть вывод итогового результата.
Вариант 10
CGI. Экзамен по дисциплине и текстовый счетчик посещения страницы.
PHP. Экзамен по дисциплине и в результате вывод не только оценки, но и перечня тем с большинством неправильных ответов. Вывод результата по темам в виде диаграммы.
Вариант 11
CGI. Проверка знания правил дорожного движения и текстовый счетчик посещения страницы.
PHP. Проверка знаний правил дорожного движения с записью результатов прохождения теста разными пользователями в файл и вывода результатов в виде диаграммы.
Содержание отчета (отчет в электронном виде):
титульный лист (один для всех лабораторных работ);
задание на лабораторную работу №3;
исходные коды разметки документов, исходные коды скриптов;
сравнительный анализ скорости работы CGI и PHP скриптов;
выводы по работе.
Методические указания:
CGI (Common Gateway Interface) – общий шлюзовой интерфейс
Один из способов формирования динамических HTML-документов заключается в использовании приложений CGI.
CGI – это интерфейс для запуска внешних программ под управлением web-сервера.
Приложение CGI – программа, использующая CGI-интерфейс, получает информацию от удаленного пользователя, обрабатывает ее, и возвращает результат (динамически сформированный HTML-документ, гиперссылка на существующий HTML-документ, графическое изображение и т.д.) Так как CGI-приложение – это программа, она должна быть оттранслирована для той операционной системы, под управлением которой работает web-сервер.
На стороне клиента размещается форма ввода, содержащая некоторые поля для ввода данных и кнопку для отсылки данных. После заполнения полей и нажатия кнопки данные в запросе клиента пересылаются на сторону сервера, где web-сервер передает присланные данные CGI-приложению.
После обработки полученных данных CGI-приложение создает документ и передает его web-сервер, который в ответе сервера возвращает документ на сторону клиента.
Передача информации от клиента к серверу и передача сформированного документа от сервера к клиенту изображена на рис. 1.
Рис. 1. Передача информации от клиента к серверу и передача сформированного документа от сервера к клиенту. Для создания формы на стороне клиента для занесения данных используется тег
Атрибут action=url определяет url GCI-приложения, предназначенного для обработки присланных данных. По умолчанию используется текущий url.
Атрибут method=get|post указывает метод передачи данных серверу. По умолчанию используется метод get.
Метод get
Метод get предполагает передачу данных GCI-приложению через переменные среды (environment variables), устанавливаемые на стороне сервера.
В зависимости от web-сервера и операционной системы могут использоваться разные переменные среды.
Для передачи данных, присланных методом get, используется переменная QUERY_STRING. Значением переменной QUERY_STRING будет строка, содержащая данные в формате name1=value1&name2=value2& … &nameN=valueN, где name – это имя поля формы, value – значение поля формы.
Метод post
При использовании метода post GCI-приложение получает присланные данные через стандартный поток ввода.
Количество байт переданных данных можно получить через переменную среды CONTENT_LENGTH.
Формирование HTML-документа
Вне зависимости от метода передачи данных, результат своей работы GCI-приложение должно направить в стандартный поток вывода.
Чаще всего GCI-приложение используется для создания HTML-документов на основе данных, полученных от клиента. В этом случае, первой строкой должен быть заголовок HTTP Content-type: text/html, за которой необходимо вывести пустую строку, отделяющую заголовки HTTP от данных HTML-документа.
Web-сервер возвращает результат, сформированный GCI-приложением, клиенту, возможно дополняя его заголовками HTTP.
GCI-приложение может сформировать полный ответ (со всеми заголовками HTTP). В этом случае web-сервер ничего не изменяет в результате работы GCI-приложения, только пересылает его клиенту как есть. Пример: на стороне клиента в поля формы заносятся имя и возраст, в зависимости от возраста возвращаются разные приветствия (рассматриваются два варианта: для методов get и post).
Вариант 1
HTML-документ, содержащий форму:
CGI-приложение (файл hello.cpp)
#include
void main()
{
int age;
char *name;
char *query_string=getenv("QUERY_STRING"); //query_string=”name=Maria&age=18”
//из строки извлекаются подстроки “Maria” и “18”
//и присваиваются переменным name и age соответственно cout<<”Content-type: text/html\n\n”;
cout<<””;
if(age<=16) cout<<”Привет, ”;
if(age>16) cout<<”Здравствуйте, ”;
cout<”;
}
Вариант 2
HTML-документ, содержащий форму:
CGI-приложение (файл hello.cpp)
#include
void main()
{
int age;
char *name;
int length=atoi(getenv("CONTENT_LENGTH"));
char * string=new char[length];
scanf("%s",string); //string=”name=Maria&age=18”
//из строки извлекаются подстроки “Maria” и “18”
//и присваиваются переменным name и age соответственно delete string;
cout<<”Content-type: text/html\n\n”;
cout<<””;
if(age<=16) cout<<”Привет, ”;
if(age>16) cout<<”Здравствуйте, ”;
cout<”;
} |