Обновление «Учет оргтехники в организации»
В последнем срезе на github , внедрён функционал по «регистровому» хранению состояния ТМЦ. В связи с чем появляется возможность формирования различного вида отчетов «на дату». Например вида:
Жизнь замечательных грибов
Здесь собраны статьи, наработки, исправление ошибок и решение проблем связанных с разработкой на языке PHP
В последнем срезе на github , внедрён функционал по «регистровому» хранению состояния ТМЦ. В связи с чем появляется возможность формирования различного вида отчетов «на дату». Например вида:
Иногда необходимо потереть вообще все кукисы, не зная какие именно установлены. Один из вариантов решения ниже:
1 2 3 4 5 6 |
function UnsetAllCookies(){ global $_COOKIE; foreach ($_COOKIE as $key=>$value) { SetCookie("$key","",time()+3600000,'/'); // трем кукисы.. }; }; |
Если клиент на javascript для WebSocket это весьма простая вещь, то на PHP чуточку сложнее. Готовых примеров в сети раз-два и обчелся. Вот пример одной из реализаций:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$local = "http://грибовы.рф"; $data = "Скрипт обработки выбора фильтра абонентом"; $key="woeudhцукацук цук пупркеркеуенakcslerug;er"; $host=$row2["mysql_ip"]; $port = 8000; $head = "GET / HTTP/1.1"."\r\n". "Upgrade: WebSocket"."\r\n". "Connection: Upgrade"."\r\n". "Origin: $local"."\r\n". "Host: $host"."\r\n". "Sec-WebSocket-Key: asd245345235d6asd6as7d"."\r\n". "Content-Length: ".strlen($data)."\r\n"."\r\n"; $sock = fsockopen($host, $port, $errno, $errstr, 2); fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr); $headers = fread($sock, 2000); //echo $headers; fwrite($sock, hybi10Encode($data)) or die('error:'.$errno.':'.$errstr); $wsdata = fread($sock, 2000); //var_dump(hybi10Decode($wsdata)); //echo "--send\n"; $mess["key"]=$key; $mess["command"]="UpdateFilterContent"; fwrite($sock, hybi10Encode(json_encode($mess))) or die('error:'.$errno.':'.$errstr); //echo "--read\n"; $wsdata = fread($sock, 2000); //var_dump(hybi10Decode($wsdata)); fclose($sock); |
Вспомогательные функции:
Можно например вот таким скриптом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/usr/bin/php <?php #сей чудный файлик собирает все файлы xmltv в один в текущей папке define('WUO_ROOT', dirname(__FILE__)); $str=""; $includes_dir = opendir(WUO_ROOT); $files = array(); while (($inc_file = readdir($includes_dir)) != false) { if (strpos($inc_file,"xmltv")>0){ $fl=WUO_ROOT."/".$inc_file; echo "$fl\n"; $str=$str.file_get_contents($fl); }; } $str=str_replace('<?xml version="1.0" encoding="UTF-8"?>', "", $str); $str=str_replace('<!DOCTYPE tv SYSTEM "xmltv.dtd">', "", $str); $str=str_replace('<tv generator-info-name="astra-epg-export">', "", $str); $str=str_replace("</tv>", "", $str); closedir($includes_dir); $zx='<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE tv SYSTEM "xmltv.dtd"><tv generator-info-name="astra-epg-export">'.$str."</tv>"; file_put_contents(WUO_ROOT."/../epg_common.xmltv",$zx); |
При построении больших графиков, удобно пропускать не значащие метки для оси.
Например было:
Как убираем лишние? Все достаточно просто. Нужно поменять в массиве labels: 1,2,3,4,5, значащие величиные на », на пусто. Например сделав для этого функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function Diffuse($label,$cnt){ $mass= explode(",", $label); //var_dump($mass); $pz=round(count($mass)/$cnt); //каждый какой оставляем? $zz=$pz; foreach ($mass as &$value) { if ($zz==$pz){ $zz=0; } else { $value="\"\""; }; $zz++; }; $ext=""; foreach ($mass as &$value) { $ext=$ext.$value.','; }; $ext=substr($ext,0,strlen($ext)-1); return $ext; }; |
, где $label — это метки, а $cnt — это количество оставляемых в массиве меток.
Результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
var ctx = document.getElementById("myChart").getContext("2d"); var startWithDataset =1; var startWithData =1; options = { animationStartWithDataset : startWithDataset, animationStartWithData : startWithData, animationSteps : 60, canvasBorders : false, canvasBordersWidth : 3, canvasBordersColor : "black", graphTitle : "График соотношения новых абонентов и отключенных ТВ", legend : true, inGraphDataShow : true, annotateDisplay : true, graphTitleFontSize: 18, animationLeftToRight : true, animationByDataset : true, responsive : true, maintainAspectRatio : true }; var data={ labels: [<?php echo Diffuse($labels,28);?>], datasets: [ { axis : 1, title: 'Новые',fillColor: "rgba(65,244,23,0.3)",strokeColor: "rgba(220,220,220,1)",pointColor: "rgba(65,126,164,1)",pointStrokeColor: "#fff",pointHighlightFill: "#fff",pointHighlightStroke: "rgba(220,220,220,1)", data: [<?php echo "$ntv_dat";?>] }, { axis : 1, title: 'Отключенные',fillColor: "rgba(244,23,44,0.3)",strokeColor: "rgba(244,23,44,1)",pointColor: "rgba(65,126,164,1)",pointStrokeColor: "#fff",pointHighlightFill: "#fff",pointHighlightStroke: "rgba(220,220,220,1)", data: [<?php echo "$btv_dat";?>] }, { axis: 2, title: 'По балансу',fillColor: "rgba(25,144,123,0)",strokeColor: "rgba(220,220,220,1)",pointColor: "rgba(65,126,164,1)",pointStrokeColor: "#fff",pointHighlightFill: "#fff",pointHighlightStroke: "rgba(220,220,220,1)", data: [<?php echo "$btv_dat_1";?>] } ] }; |