Архив, содержащий программный код и структуру каталогов веб-приложения.

server.rar

Корневой каталог веб-приложения

<? $mysqli = mysqli_connect('address','ReadOnlyLogin', 'ReadOnlyPass','DB') or die ("Connection error: ". mysqli_error($mysqli)); ?> <style> /* стили таблицы */ th { text-indent: 0px; border-collapse: collapse; background: #e8edfa; border-bottom: 1px solid #fff; color: #500; font-weight: 700; border-top: 0px solid transparent; padding: 2px; text-align:center; } td { text-indent: 0px; border-collapse: collapse; background: #e8edff; border-bottom: 1px solid #fff; color: #500; border-top: 0px solid transparent; padding: 2px; text-align:center; } tr:hover td {background: #eeddff;} tr{text-indent: 1px;} tr: </style> <? /* Проверка на соеденение с базой данных */ if (!$mysqli) { die ("Error!"); mysqli_close($mysqli); } else { /* подготовка запроса на получение данных для последних двадцати сессий передачи */ $query = 'SELECT sd.Num as Num,sd.Type as Type,sd.Value as Value,li.Date as Date,li.uid as Unit FROM save_data sd INNER JOIN ( SELECT Num_i as Num, Date, ul.uname as uid FROM info inf INNER JOIN ( SELECT uNum,uName as uname FROM units_list) as ul ON inf.Prib_id = ul.uNum ORDER BY inf.Num_i DESC LIMIT 20) as li ON li.Num = sd.Num'; /* Добавление к запросу фильтра */ if(isset($_GET['filter'])) { $query .= ' '.$_GET['filter']; } $query .= ' ORDER BY sd.Num ASC'; /* выполнение запроса и формирование из результата массива, по которому будет построена таблица */ $result = $mysqli->query("$query"); if(!$result) { die("Wrong query!"); } else { $t_mas = array(); while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) { if(!in_array($myrow['Type'], $t_mas)) { array_push($t_mas, $myrow['Type']); } } rsort($t_mas); array_unshift($t_mas, "Unit","Date"); mysqli_data_seek($result, 0); $i = 0; $ss = -1; while($infrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) { $nob = $infrow['Num']; if($ss != $nob) { $i++; $ss = $nob; } $mass[$i][array_search($infrow['Type'], $t_mas)] = $infrow['Value']; $mass[$i][array_search("Unit", $t_mas)] = $infrow['Unit']; $mass[$i][array_search("Date", $t_mas)] = $infrow['Date']; } unset($i); $title .= '<thead><tr>'; for($i=0; $i<count($t_mas); $i++) { $title .= '<th>'.$t_mas[$i].'</th>'; } unset($i); for($i=1; $i<count($mass)+1; $i++) { $max .= '<tr>'; for($j=0; $j<count($t_mas); $j++) { $max .= '<td>'.$mass[$i][$j].'</td>'; } $max .= '</tr>'; } $list = $title.'</tr></thead><tbody>'.$max.'</tbody>'; echo '<table width="100%" style="font-size: 11px">'.$list.'</table>'; } } mysqli_close($mysqli); ?>

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Home page</title> </head> <body> <p><a href="/admin">Панель управления</a></p> <p><a href="/conn.php">Дебаг-монитор</a></p> <p><a href="/mainexport.html">Данные за интервал времени</a></p> </body> </html>

<!DOCTYPE html> <html> <head> <title> Export page </title> <meta charset="utf-8"> <!-- jQuery --> <script type="text/javascript" src="/core/lib/jquery.min.js"></script> <!-- Script for moment lib --> <script type="text/javascript" src="/core/lib/moment.js"></script> <!--Load Script and Stylesheet for DATETIMEPICKER --> <script type="text/javascript" src="core/lib/datetimepicker/jquery.simple-dtpicker.js"></script> <link type="text/css" href="core/lib/datetimepicker/jquery.simple-dtpicker.css" rel="stylesheet" /> <!----> <style type="text/css"> .hidden{ visibility: hidden; } </style> </head> <body> <form id="zmnx"> <b> Выберите как вы хотите получить результат </b> <p><input type="radio" name="how" value="json">JSON лог-файл</p> <p><input type="radio" name="how" value="table">Таблица данных</p> </form> <form id="jsonly" class="hidden"> <label for="firstt">Выберите начало временного интервала</label> <p><input id="firstt" type="text" name="firstt" value=" YYYY-MM-DD HH:mm "></p><br> <label for="secondt">Выберите конец временного интервала</label> <p><input id="secondt" type="text" name="secondt" value=" YYYY-MM-DD HH:mm "></p> <p id="point"><input type="submit" id="okey" value="Принять" onclick="event.preventDefault();getinfo();"></p> </form> <center><div id="outres"></div></center> </body> </html> <script type="text/javascript"> function getinfo() { var fdate = document.getElementById('firstt').value + ':00'; var sdate = document.getElementById('secondt').value + ':00'; if((moment(fdate, 'YYYY-MM-DD HH:mm:ss',true).isValid()) && (moment(sdate, 'YYYY-MM-DD HH:mm:ss',true).isValid())) { if($('#units').length && $('#units').val() != '') { $.get('core/deb.php',{fdate: fdate,sdate: sdate, manualmode: '1',unitid: $('#units').val()},function(back){document.getElementById('outres').innerHTML=back;}); $('#outres').html('<p>Загрузка ...<p>'); } else if(!($('#units').length)) { $.get('core/deb.php',{fdate: fdate,sdate: sdate,fileback: '1'},function(back){document.getElementById('outres').innerHTML=back;}); $('#outres').html('<p>Загрузка ...<p>'); } else { alert("Выберите прибор."); } } else { alert("Заполните все поля корректно."); } } $(function(){ $('#firstt').appendDtpicker({"locale": "ru","closeOnSelected": true,"autodateOnStart": false,"minuteInterval": 15, "dateFormat": "YYYY-MM-DD hh:mm"}); $('#secondt').appendDtpicker({"locale": "ru","closeOnSelected": true,"autodateOnStart": false,"minuteInterval": 15, "dateFormat": "YYYY-MM-DD hh:mm"}); var d = new Date(); $('#secondt').change(function() { $('#firstt').appendDtpicker({ maxDate: $('#secondt').val() // when the end time changes, update the maxDate on the start field }); }); $('#firstt').change(function() { $('#secondt').appendDtpicker({ minDate: $('#firstt').val() // when the start time changes, update the minDate on the end field }); }); $("[name='how']").change(function() { if($('input[name=how]:checked').val() == 'table') { var inp = document.createElement('select'); inp.id = 'units'; //jsonly.insertBefore(inp, jsonly.okey); $(inp).insertBefore('#point'); var url = 'core/backend.php'; $.get(url,"unitslist=1",function (result) { $('#units').html('<option value=""> -- Выберите прибор -- </option>'+result); }) } else { $('#units').remove(); } $('#jsonly').removeClass("hidden"); }); // trigger change event so datapickers get attached $('#secondt').trigger('change'); $('#firstt').trigger('change'); }); </script>

Каталог export

standart_book.xlsx

Каталог core

<? $str = $_POST; list($user, $pass, $inject) = explode(';', trim($str, ';')); $mysqli = mysqli_connect('address',$user, $pass,'DB'); if (!$mysqli) { die ("Error!"); mysqli_close($mysqli); } else { $result = $mysqli->query("$inject"); if(!$result) { die("Empty result!"); } else { $t_mas = []; $v_mas = []; $i = -1; $ind = -1; $test = mysqli_fetch_array($result,MYSQLI_ASSOC); mysqli_data_seek($result, 0); if ($test['Num'] != NULL) { while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) { if($myrow['Num'][0] != $ind) { $i++; $ind = $myrow['Num'][0]; $t_mas[$i] .= 'Session number'.';'.$myrow['Type'].';'; $v_mas[$i] .= $myrow['Num'][0].';'.$myrow['Value'].';'; } else { $t_mas[$i] .= $myrow['Type'].';'; $v_mas[$i] .= $myrow['Value'].';'; } } for($n=0; $n < count($t_mas); $n++) { $text .= $t_mas[$n]."\r\n".$v_mas[$n]."\r\n\r\n"; } } else { $cnt = 1; while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) { foreach ($myrow as $key => $value) { if($cnt = 1){$title .= $key.';';} $v_string .= $value.';'; } $v_string .= "\r\n"; } $text = $title."\r\n".$v_string."\r\n\r\n"; } echo $text; } } mysqli_close($mysqli); ?>

<? require_once 'baseinfo.php'; /* получение параметров для устройства с переданным ID */ if(isset($_GET['unitnow'])) { $id = $_GET['unitnow']; $buff = array(); $result = $mysqli->query("SELECT DISTINCT `Type` FROM `save_data` sd INNER JOIN (SELECT `Num_i` FROM `info` WHERE `Prib_id` = $id ORDER BY `Num_i` DESC LIMIT 1) inf ON inf.Num_i = sd.Num WHERE (`Type` NOT LIKE 'system_%') AND (`Type` NOT LIKE '%addr')"); if(mysqli_num_rows($result)) { while($row = mysqli_fetch_array($result)) { $buff[] = array('title'=>$row['Type']); } $away = array('back'=>'success','sens'=>$buff); } else { $away = array('back'=>'error'); } print json_encode($away); } /* получение списка устройств */ if(isset($_GET['unitslist'])) { $result = $mysqli->query("SELECT uNum,uName,Serial FROM units_list"); while($rows = mysqli_fetch_array($result)) { $back .= '<option value="'.$rows['uNum'].'">'.$rows['uName'].' ('.$rows['Serial'].')</option>'; } print_r($back); } /* изменение данных о адресе датчика */ if(isset($_POST['update'])) { $upd = $_POST['update']; $str = ''; foreach ($upd as $headkey => $headvalue) { $str = "UPDATE `Production`.`sensors_adr` SET `".$headvalue[1]."`='".$headvalue[2]."' WHERE id=".$headvalue[0]; $mysqli->query("$str"); } } /* внесение нового датчика */ elseif(isset($_POST['insert'])) { $ins = $_POST['insert']; $columns = '`timestamp`,'; $values = 'NOW(),'; foreach ($ins as $key => $value) { $columns .= '`'.$value[0].'`,'; $values .= "'".$value[1]."',"; } $str = "INSERT INTO `Production`.`sensors_adr` ($columns) VALUES ($values)"; $str = str_replace(',)', ')', $str); $mysqli->query("$str"); } /* проверка наличие параметра адреса датчика и его значения в передаваемых устройством данных */ elseif(isset($_GET['unit_addr_exist'])) { $unit = $_GET['unit_addr_exist']; $result_array = array(); $away = array(); $text = "SELECT `sd`.`Num`,`sd`.`type`,`sd`.`value` FROM `Production`.`save_data` as `sd` INNER JOIN (SELECT `Num_i` FROM `Production`.`info` WHERE `Prib_id`='$unit' ORDER BY `Num_i` DESC LIMIT 1) inf ON `sd`.`Num` = `inf`.`Num_i` WHERE `sd`.`Type` LIKE '%addr'"; $result = $mysqli->query("$text"); if($result->num_rows) { while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) { $result_array[] = ['Type'=>str_replace('_addr','',$row['type']),'Val'=>$row['value']]; } $away = array('error'=>'false','data'=>$result_array); } else { $away = array('error'=>'true'); } echo json_encode($away); } ?>

<? $mysqli = mysqli_connect('address','login','pass','DB'); ?>

<? ini_set('memory_limit', '512M'); // изменение лимита памяти для скрипта header('Content-Type: text/html; charset=UTF-8'); require_once 'baseinfo.php'; // подключение файла хранящем информацию о соединение с базой данных /* функция формирование результатов калибровки в массив */ function finish($mysqli,$qur) { $result = $mysqli->query("$qur"); mysqli_close($mysqli); $mass = array(); $buff = array(); $alt = array(); $i = -1; $n = -1; $searchindex = 0; while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) { $search = $row['uName'].','.$row['serial']; if(isset($mass[$search])) { $i = $mass[$search]; } else { ++$n; $i = $n; $mass[$search] = $i; } $buff[$i]['uName'] = $row['uName']; $buff[$i]['serial'] = $row['serial']; $alt[$i][$row['sensor']][] = ['datetime'=>$row['timestamp'],'data'=>json_decode($row['ratio'],false)]; $searchindex = array_search($row['sensor'], array_column($buff[$i]['sensors'],'sensor')); if ((false !== $searchindex) && isset($searchindex)) { $buff[$i]['sensors'][$searchindex] = ['sensor'=>$row['sensor'],'calibr'=>$alt[$i][$row['sensor']]]; } else { $buff[$i]['sensors'][] = ['sensor'=>$row['sensor'],'calibr'=>$alt[$i][$row['sensor']]]; } //$buff[$i]['sensors'][] = ['sensor'=>$row['sensor'],'calibr'=>['datetime'=>$row['timestamp'],'data'=>json_decode($row['ratio'],false)]]; } echo json_encode($buff,JSON_UNESCAPED_UNICODE); } /* --------------------------------------------------- */ /* Данные калибровки */ if(isset($_GET['calibration'])) { $line = 'SELECT mu.sensor,mu.timestamp,mu.ratio,li.uname as uName,li.Serial as serial FROM multiplier as mu INNER JOIN (SELECT uNum,uName as uname,Serial from units_list) as li ON li.uNum = mu.unit'; switch ($_GET['calibration']) { case 'full': // все данные break; case 'filtid': // данные устройства с указанным id $line .= ' WHERE mu.unit='.$_GET['id']; break; } finish($mysqli,$line); } /* --------------------------------------------------- */ /* Данные за интервал времени */ elseif (isset($_GET['manualmode'])) { $return = ''; $infile = ''; $t_mas = array(); $mass = array(); switch($_GET['manualmode']) { case 1: if((isset($_GET['fdate'])) && (isset($_GET['sdate'])) && (isset($_GET['unitid']))) { $fdate = $_GET['fdate']; $sdate = $_GET['sdate']; if(strtotime($sdate)>strtotime("now")): $sdate = date("Y-m-d H:i:s"); endif; if(strtotime($fdate)<strtotime('2019-01-24 17:31:43')): $fdate = '2019-01-24 17:31:43'; endif; $unit = $_GET['unitid']; $list = $mysqli->query("SELECT DISTINCT Type FROM save_data sd INNER JOIN (SELECT Num_i from info WHERE `Date` BETWEEN '$fdate' AND '$sdate' AND Prib_id = $unit) inf ON sd.Num = inf.Num_i WHERE (`Type` NOT LIKE 'system_%')"); $about = mysqli_fetch_array($mysqli->query("SELECT uName,Serial FROM units_list WHERE uNum = $unit")); $result = $mysqli->query(" SELECT sd.Type as Type,sd.Value as Value,li.Date as Date FROM `save_data` as sd INNER JOIN ( SELECT `Date`,`Num_i` FROM `info` WHERE (`Date` BETWEEN '$fdate' AND '$sdate') AND (Prib_id = $unit) ) as li ON sd.Num = li.Num_i WHERE (`Type` NOT LIKE 'system_%')",MYSQLI_USE_RESULT); $makeat = '../export/last_export.csv'; $fd = fopen($makeat, 'w'); $infile = 'Прибор: ;'.$about['uName'].' ('.$about['Serial'].'); ; Интервал: ;'.$fdate.'; / ;'.$sdate.";\n"; fwrite($fd,iconv('utf-8', 'windows-1251',$infile)); while($myrow = mysqli_fetch_array($list,MYSQLI_ASSOC)) // составление массива заголовков { if(!in_array($myrow['Type'], $t_mas)) { array_push($t_mas, $myrow['Type']); } } rsort($t_mas); array_unshift($t_mas,"Date"); unset($infile); for($i=0; $i<count($t_mas); $i++) { $infile .= $t_mas[$i].";"; // запись в файл из массива заголовков } $infile .= "\n"; fwrite($fd, iconv('utf-8', 'windows-1251', $infile)); // вносим заголовки в файл //mysqli_data_seek($result, 0); // возвращение указателя в начало результата unset($i); $i = 0; $ss = -1; while($infrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) // заполнение массива значений { $nob = $infrow['Date']; if($ss != $nob) { $i++; $ss = $nob; } $mass[$i][array_search($infrow['Type'], $t_mas)] = $infrow['Value']; $mass[$i][array_search("Date", $t_mas)] = $infrow['Date']; } unset($i); unset($infile); $infile = ''; for($i=1; $i<count($mass)+1; $i++) { for($j=0; $j<count($t_mas); $j++) { $infile .= $mass[$i][$j].";"; } $infile .= "\n"; fwrite($fd, iconv('utf-8', 'windows-1251', $infile)); // построчное заполнение файла в цикле unset($infile); } $return = '<a href="'.$makeat.'" download>Скачать таблицу</a>'; } else { $return = 'Error'; } mysqli_close($mysqli); break; } echo $return; } elseif ((isset($_GET['fdate'])) && (isset($_GET['sdate']))) { $fdate = $_GET['fdate']; $sdate = $_GET['sdate']; if(strtotime($sdate)>strtotime("now")): $sdate = date("Y-m-d H:i:s"); endif; if(strtotime($fdate)>strtotime("now")): $fdate = '2019-01-24 17:31:43'; endif; $result = $mysqli->query("SELECT sd.Type,sd.Value,sd.Num,inf.Date,ul.uName,ul.Serial FROM save_data as sd INNER JOIN (SELECT `Num_i`, `date`, `Prib_id` FROM `info` WHERE `Date` BETWEEN '$fdate' AND '$sdate') as inf ON inf.Num_i = sd.Num INNER JOIN (SELECT DISTINCT `uName`,`uNum`,`Serial` FROM `units_list`) as ul ON ul.uNum = inf.Prib_id",MYSQLI_USE_RESULT); // выполнение запроса $first = mysqli_fetch_array($result,MYSQLI_ASSOC); $i = $first['Num']; /* формирование файла с результатом */ if(isset($_GET['fileback'])) { $makeat = '../export/log.txt'; $fd = fopen($makeat, 'w'); fwrite($fd, '{'); fwrite($fd,'"'.$i.'":{"Date":"'.$first['date'].'","uName":"'.$first['uName'].'","serial":"'.$first['Serial'].'","data":{"'.$first['Type'].'":"'.$first['Value'].'"'); while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) { if($row['Num']!=$i) { $i = $row['Num']; fwrite($fd,'}},"'.$i.'":{"Date":"'.$row['date'].'","uName":"'.$row['uName'].'","serial":"'.$row['Serial'].'","data":{'); } else { fwrite($fd, ','); } fwrite($fd,'"'.$row['Type'].'":"'.$row['Value'].'"'); } fwrite($fd, '}}}'); echo '<a href="'.$makeat.'" download>Скачать log-файл</a>'; } else /* возвращение результата как текста */ { echo '{'; echo '"'.$i.'":{"Date":"'.$first['date'].'","uName":"'.$first['uName'].'","serial":"'.$first['Serial'].'","data":{"'.$first['Type'].'":"'.$first['Value'].'"'; while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) { if($row['Num']!=$i) { $i = $row['Num']; echo '}},"'.$i.'":{"Date":"'.$row['date'].'","uName":"'.$row['uName'].'","serial":"'.$row['Serial'].'","data":{'; } else { echo ','; } echo '"'.$row['Type'].'":"'.$row['Value'].'"'; } echo '}}}'; } mysqli_free_result($result); mysqli_close($mysqli); } ?>

<? require_once '../core/baseinfo.php'; if (isset($_POST['fromtable'])) // если пришёл ПОСТ с содержимым экселя { $arr = json_decode(str_replace('][', ',', $_POST['fromtable']), true); $unit_num = $arr[0]['AKey']; $result = mysqli_fetch_array($mysqli->query("SELECT `OPid` FROM `units_list` WHERE `uNum`='$unit_num'")); if($result != NULL) { foreach ($arr as $key => $value) { $mysqli->query("INSERT `Info`(`Date`,`Prib_id`,`OpNum`) VALUES (NOW(),$unit_num,$result[OPid])"); $lastid = mysqli_insert_id($mysqli); foreach ($value as $got => $it) { if($got!='AKey') { $word .= "('$lastid','$got','$it')"; } } if($word!='') { $str = 'INSERT `Save_data`(`Num`,`Type`,`Value`) VALUES '.$word; $query_str = str_replace(')(', '),(', $str); $mysqli->query("$query_str"); } $word = ''; } mysqli_close($mysqli); } else{} } elseif(isset($_POST)) // если пришёл пост извне { $inmass = file_get_contents('php://input'); $arr = json_decode($inmass,true); if($arr['system']['Akey']!==NULL) // ищем ключ в массиве с вложенностями { $Key = $arr['system']['Akey']; $done = $mysqli->query("SELECT `uNum`,`OPid`,`IDob`,`x`,`y` FROM `units_list` WHERE `AKey`='$Key'"); // если ключ есть в базе, то получаем информацию о приборе $result = mysqli_fetch_array($done); if($result!=NULL) { $str = 'INSERT `Save_data`(`Num`,`Type`,`Value`) VALUES '; $unit_num = $result[uNum]; $mysqli->query("INSERT `Info`(`Date`,`Prib_id`,`OpNum`,`ObjectId`,`x`,`y`) VALUES (NOW(),$unit_num,$result[OPid],$result[IDob],$result[x],$result[y])"); $lastid = mysqli_insert_id($mysqli); /* формирование названия параметра с учётом иерархие вложенности */ $path = array(); $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST); foreach ($it as $key => $value) { $path = array(); if(!is_array($value) && $key != 'Akey') { for ($count = $it->getDepth()+1; $count && $count--;) { array_unshift($path, $it->getSubIterator($count)->key()); } $path = implode('_', $path); $str .= "('$lastid','$path','$value')"; } } $query_str = str_replace(')(', '),(', $str); $mysqli->query("$query_str"); mysqli_close($mysqli); } } else {} // если нет ключа, то игнорируем } ?>

<? $str = file_get_contents('php://input'); list($user, $pass, $inject) = explode(';', trim($str, ';')); // получение логина и пароля пользователя БД и SQL запроса $mysqli = mysqli_connect('localhost',$user, $pass,'production'); if (!$mysqli) { die ("Error!"); mysqli_close($mysqli); // проверка соединения с БД } else { $result = $mysqli->query("$inject"); if(!$result) { die("Wrong query!"); } else { $t_mas = []; $v_mas = []; $i = -1; $test = mysqli_fetch_array($result,MYSQLI_ASSOC); mysqli_data_seek($result, 0); if ($test['Num'] != NULL) { /* формирование строк CSV формата */ while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) { if($myrow['Num'][0] != $ind) { $i++; $ind = $myrow['Num'][0]; $t_mas[$i] .= 'Session number'.';'.$myrow['Type'].';'; $v_mas[$i] .= $myrow['Num'][0].';'.$myrow['Value'].';'; } else { $t_mas[$i] .= $myrow['Type'].';'; $v_mas[$i] .= $myrow['Value'].';'; } } for($n=0; $n < count($t_mas); $n++) { $text .= $t_mas[$n]."\r\n".$v_mas[$n]."\r\n\r\n"; } } else { $cnt = 1; while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) { foreach ($myrow as $key => $value) { if($cnt = 1){$title .= $key.';';} $v_string .= $value.';'; } $v_string .= "\r\n"; } $text = $title."\r\n".$v_string."\r\n\r\n"; } echo $text; } } mysqli_close($mysqli); ?>

doc:1513:excel.png doc:1513:form.png

lib.rar

Каталог admin