Отправка результатов MyTestXPro методом POST на веб-сервер в Интернет: различия между версиями
Bas (обсуждение | вклад) (Новая страница: «Иногда отправлять результаты в модуль Журнал (MyTestServer) нет возможности или не целесообра…») |
Bas (обсуждение | вклад) |
||
Строка 101: | Строка 101: | ||
echo '</html>'; | echo '</html>'; | ||
?> | ?> | ||
− | <pre> | + | </pre> |
+ | |||
Вот пример его работы: | Вот пример его работы: | ||
+ | |||
+ | [[File:post_web.png|400px]] |
Версия 17:21, 4 июля 2013
Иногда отправлять результаты в модуль Журнал (MyTestServer) нет возможности или не целесообразно. В этом случае можно организовать автоматическую отправку результатов по электронной почте или на web-сервер. Первый способ (по эл. почте) более прост в использовании, но менее удобен. Отправка результатов на веб-сервер требуется наличия веб-сервера, где можно организовать прием, все нужные права доступа и знания по программированию для веб, например на PHP.
Логика приема и обработки результатов на веб-сервере может быть у каждого своя, в этом разделе приведем один из примеров от которого можно отталкиваться. В данном примере не будем использовать базы данных, а для простоты только файлы, вы же можете организовывать работу более сложным и гибким образом.
Для того чтобы модуль тестирования мог отправлять результаты на веб-сервер необходимо в параметрах теста разрешить данную операцию – Параметры теста → Сохранение и вывод результатов → Отправлять результаты в веб.
Так же необходимо настроить модуль тестирования. В настройках нужно установить переключатель "Разрешить отправлять результаты в web" и указать адрес (URL) страницы, которой будут передаваться результаты. Так же можно задать параметры прокси-сервера (через правку файла настроек). В настройках модуля тестирования и настройках автономного теста данные опции (в этой версии) находятся на вкладке с настройками отправки данных по эл. почте.
И, естественно, у вас должен быть веб-сервер, где вы разместите страницу (скрипт) приема и обработки результатов.
Например, скрипт на PHP для приема и сохранения результатов может выглядеть так:
<?php //можно проверить ключ if ($_GET['key'] != '8F480FED-621A-41E1-8CB7-E6D4CC9DB76B') break; //проверка связи if($_POST['Test'] == 'Test'){ echo 'OK'; break; } //папка с результатами $file_dir = $_SERVER['DOCUMENT_ROOT'].'/E86D3AB5-2F02-4E8F-8F50-349656C9272E/Results/'; //текстовый файл с результатами (в папке с результатами) $file_name = $file_dir . '1.txt'; //получаем данные, отпрвленные методом POST $UserName = $_POST['UserName']; $UserName = iconv("UTF-8", "Windows-1251", $UserName); $UserGroup = $_POST['UserGroup']; $UserGroup = iconv("UTF-8", "Windows-1251", $UserGroup); $Mark = $_POST['Mark']; $Mark = iconv("UTF-8", "Windows-1251", $Mark); $Result = $_POST['Result']; $Result = iconv("UTF-8", "Windows-1251", $Result); $ip = $_SERVER['REMOTE_ADDR']; $today = date("d.m.Y H:i:s"); //$CSV = $_POST['CSV']; //$CSV = iconv("UTF-8", "Windows-1251", $CSV); //файл с результатами if(isset($_FILES['file']['name']) && !empty($_FILES['file']['name'])){ if($_FILES['file']['error'] != UPLOAD_ERR_OK) break; //проверка, что нет ошибок при загрузке $upload_fn = explode(".", $_FILES['file']['name']); if(empty($upload_fn[1]) || ($upload_fn[1] != 'mtxpr')) break; //проверка расширения if($_FILES['file']['size'] > 1000000) break; //Загружаемый файл превысил допустимое значение ... байт $upload_path_files = $_SERVER['DOCUMENT_ROOT'] . '/E86D3AB5-2F02-4E8F-8F50-349656C9272E/Results/'; //путь к файлам $upload_file_name = time() . '_' . $_FILES['file']['name']; $upload_new_file_name = $upload_path_files . $upload_file_name; //Добавляем файл в каталог (сохраняем файл с результатами) if(!move_uploaded_file($_FILES['file']['tmp_name'], $upload_new_file_name)) $upload_new_file_name = ''; } //теперь сохраним данные в текстовый файл $upload_new_file_name = str_replace($_SERVER['DOCUMENT_ROOT'], '', $upload_new_file_name); $upload_size = $_FILES['file']['size']; $str = $today . "\t" . $ip . "\t" . $UserName . "\t" . $UserGroup . "\t" . $Mark . "\t" . $Result . "\t" . $upload_new_file_name . "\t" . $upload_size . "\r\n"; $fd = fopen($file_name, 'a') or die('error'); flock($fd,2); fputs($fd,$str); flock($fd,3); fclose($fd); //если все хорошо, отправим обратно ОК echo 'OK'; ?>
Данный скрипт сохранит результаты в текстовый файл и сохранить файл с (защищенными) результатами. Данные передаются методом POST, как обычной формой. Кодировка UFT8, в данном примере мы конвертируем текст в кодировку win-1251.
Пример скрипта, который отображает полученные результаты таблицей и дает скачать каждый отдельный результат:
<?php echo '<!DOCTYPE HTML>'; echo '<html>'; echo ' <head>'; echo ' <title>Результаты</title>'; echo ' <meta charset="windows-1251">'; echo ' <link rel="stylesheet" type="text/css" href="style.css">'; echo ' </head>'; echo ' <body>'; $file_dir = $_SERVER['DOCUMENT_ROOT'].'/E86D3AB5-2F02-4E8F-8F50-349656C9272E/Results/'; $file_name = $file_dir . '1.txt'; $f = file($file_name); $table = '<table>'; $table .= '<tr><th>№</th><th>Дата</th><th>IP</th><th>Имя</th><th>Группа</th><th>Оценка</th><th>Результат в % от макс. баллов</th><th>Файл результата</th><th>Размер файла</th><tr>'; $count_res = count($f); for($i=0; $i<$count_res; $i++){ //$line = iconv('utf-8', 'windows-1251', trim($f[$i])); $line = trim($f[$i]); $r = explode("\t", $line); $count_col = count($r); $tr = '<td>'.strval($i+1).'</td>'; for($j=0; $j<$count_col; $j++){ if($j==$count_col-2) { $url = 'http://'.$_SERVER['HTTP_HOST'].$r[$j]; $str = '<a href="'.$url.'">'.basename($r[$j]).'</a>'; }else $str = $r[$j]; $tr .= '<td>'.$str.'</td>'; } $table .= '<tr>'.$tr.'</tr>'; } $table .= '<table>'; echo $table; echo ' </body>'; echo '</html>'; ?>
Вот пример его работы: