/var/www/protarget.com.ua/www/libs
NameSizeModeActions
class.ajax.php7940755editdlrm
class.bootstrap.php42740755editdlrm
class.controller.php9040755editdlrm
class.database.php20030755editdlrm
class.form.php30900755editdlrm
class.gd.php89820755editdlrm
class.hash.php2100755editdlrm
class.model.php17340755editdlrm
class.num_to_string.php40160755editdlrm
class.session.php11780755editdlrm
class.transfer_scales.php106260755editdlrm
class.validate.php25840755editdlrm
class.view.php9010755editdlrm
Edit: /var/www/protarget.com.ua/www/libs/class.transfer_scales.php (10626B)
0x1021, "init" => 0, "xor_out" => 0, ); foreach ($aDefaults as $key => $val){ if (!isset($aParams[$key])){ $aParams[$key] = $val; } } $sStr .= ""; $crc = $aParams['init']; $len = strlen($sStr); $i = 0; while ($len--){ $crc ^= ord($sStr[$i++]) << 8; $crc &= 0xffff; for ($j = 0; $j < 8; $j++){ $crc = ($crc & 0x8000) ? ($crc << 1) ^ $aParams['polynome'] : $crc << 1; $crc &= 0xffff; } } $crc ^= $aParams['xor_out']; return $crc; } /** * @param * $count_page количетво страниц PLU * $command команда , 207 - запись * $tranz - передача * $mode - режим (0/1)(запись/чтение) * $numv - номер вессов (не использется) * $pagelength - 100 если запись * $deprtment - номер отдела * @return string * */ public static function buildHeader ($count_page,$command=207,$tranz=0,$mode = 0,$numv=0,$pagelength = 100,$department=1){ $cmdheader = pack("hvvvh",$tranz,$command,$mode,$department,$numv); $len_header_cmd =strlen($cmdheader); $totallength = ($count_page*$pagelength)+$len_header_cmd;// длина всего пакета $packetheader = pack("v*",$totallength,$count_page,$pagelength); self::$header =bin2hex($packetheader). bin2hex($cmdheader); return ( strlen(self::$header)/2==14) ; } /** * @param * (array) $adress ip port вессов * (array) $PLU * $PLU['name'] наименование артикула не больше 56 символов * $PLU['id'] №PLU и его же артикул * $PLU['units'] еденицы измерения * $PLU['grad'] 0/1 0-вессовой , 1 - штучный * $PLU['price'] цена * $PLU['category'] * @return * (bool) */ public static function send ( $PLU, $adress,$Wweight=1000){ if(is_array($PLU)){ $rezerv = bin2hex(pack("h",2)); //стартовый байт /*---------------------------------------------------------------------------------------*/ $c =0; $arr = array(); $countAdr = count($adress); foreach ($PLU as $k=>$v){ $c++; $arr[$k]=''; $id = (int)$v['id']; if((int)$v['id']==0){ self::logs('ID товара должно быть числом'); return false; } $arr[$k].=bin2hex(pack ('l',$v['id'] ));// номер PLU $charPluArtile = 13;//Article количество байт (Не менять!) $a =pack('a*',$v['id']); $articleNum= bin2hex($a); if(strlen($articleNum)/2<$charPluArtile){ for($i=0;$i<$charPluArtile-strlen($articleNum)/2;$i++){ $arr[$k].= bin2hex(pack('a',0)); } }else if(strlen($articleNum)/2>$charPluArtile){ self::logs('Не удалось сформировать артикул'); return false; } $arr[$k].=$articleNum; $string = explode(' ',$v['name']); $buffStr = ''; $plu1 =''; $plu2 =''; $charPluName = 30; $buffStr1 =''; $overflow = false; $x=0; $CP866=''; $bin=''; for($i=0;$i$charPluName){ $plu1 = substr ($plu1,0, $charPluName *2); } }else{ $overflow = true; } } if($overflow){ $CP866 =iconv("UTF-8", "CP866", $string[$i].' '); $bin = bin2hex(pack('A*',$CP866)); $buffStr1 .=$bin; if (strlen($buffStr1)/2<=$charPluName){ $plu2=$buffStr1; } } } if($charPluName-strlen($plu1)/2>0){ $i=0; while($i <$charPluName-strlen($plu1)/2){ $plu1.= bin2hex(pack('a',' ')); } } if($charPluName-strlen($plu2)/2>0){ $i=0; while($i <$charPluName-strlen($plu2)/2){ $plu2.= bin2hex(pack('a',' ')); } } if (strlen($plu1)/2==$charPluName && strlen($plu2)/2==$charPluName){ $arr[$k].=$plu1.$plu2.'20'.bin2hex(pack('l',(isset($v['price'])&&is_numeric($v['price']))?$v['price']*100:0)).'00'.bin2hex(pack('c',(isset($v['units'])&&is_numeric($v['units']))?$v['units']:0)).'1010'.bin2hex(pack('l',(is_numeric($Wweight))?$Wweight:0)).bin2hex(pack('s',(isset($v['category'])&&is_numeric($v['category']))?$v['category']:0)).bin2hex(pack('h',(isset($v['grad'])&&is_numeric($v['grad']))?$v['grad']:0)).'00000000000000'; }else{ self::logs('Не удалось сформировать наименование PLU'); return false; } if($c%8==0){ if( !self::buildHeader($c)){ self::logs('Не правильно сформирован заголовок'); return false; } $s = self::$header.implode('',$arr); $len = strlen($s); $ctrl_sum = dechex(self::crc16(pack("H{$len}", $s))); //контрольная сумма $hex_str = $rezerv.$s.$ctrl_sum; $arr = array(); if(is_array($adress)){ for ($k=0;$k<$countAdr;$k++){ if($k!=0 && $adress[$k]['ip']!=$adress[$k-1]['ip']){ if(!self::sendSocket($adress[$k]['ip'],$adress[$k]['port'],$hex_str)){ self::logs('Не удалось отправить данные на '.$ip.':'.$port); return false; } }else{ if(!self::sendSocket($adress[$k]['ip'],$adress[$k]['port'],$hex_str)){ self::logs('Не удалось отправить данные на '.$ip.':'.$port); return false; } usleep(1000000); } } } } } if(count($arr)>0){ if( !self::buildHeader(count($arr))){ self::logs('Не правильно сформирован заголовок'); return false; } $s = self::$header.implode('',$arr); $len = strlen($s); $ctrl_sum = dechex(self::crc16(pack("H{$len}", $s))); //контрольная сумма $hex_str = $rezerv.$s.$ctrl_sum; if(is_array($adress)){ for ($k=0;$k<$countAdr;$k++){ if($k!=0 && $adress[$k]['ip']!=$adress[$k-1]['ip']){ if(!self::sendSocket($adress[$k]['ip'],$adress[$k]['port'],$hex_str)){ self::logs('Не удалось отправить данные на '.$ip.':'.$port); return false; } }else{ if(!self::sendSocket($adress[$k]['ip'],$adress[$k]['port'],$hex_str)){ self::logs('Не удалось отправить данные на '.$ip.':'.$port); return false; } usleep(1000000); } } } } }else{ self::logs('Передан не массив PLU'); return false; } return true; } /** * * * */ public function sendSocket($ip,$port,$hex_string){ $fp = fsockopen($ip, $port, $errno, $errstr,15); if (!$fp) { return false; } else { $binary_string = pack("H*" , $hex_string); if(fwrite($fp, $binary_string) !== false ){ fclose($fp); return true; }else{ fclose($fp); return false; } } } /** * * * * */ public static function logs ( $str , $file='scale' ){ $file = fopen('logs/'.$file.'.txt','a+'); fputs($file, date('Y-m-d H:i:s').' | '.$str."\r\n"); fclose($file); } }