TransWar File Browser

Path: C:\

<?php
  ini_set('max_execution_time',259200); 
  ini_set ( 'memory_limit' , '4095M' ) ;
  //define('URL_POSITRON', 'http://mensageria-integracao.positronrt.com.br:12353');
  //define('USER_POSITRON', 'transwar');
  //define('KEY_POSITRON', 'WpH9nGyW');
  //define('FILA_POSITRON', 'fila_trans_war');
  date_default_timezone_set('America/Sao_Paulo');
  function legacy_each($array){
    $key = key($array);
    $value = current($array);
    $each = is_null($key) ? false : [
        1        => $value,
        'value'  => $value,
        0        => $key,
        'key'    => $key,
    ];
    next($array);
    return $each;
  }
  function xmlToArray($xml, $options = array()) {
    $defaults = array(
        'namespaceSeparator' => ':', // você pode querer que isso seja algo diferente de um cólon
        'attributePrefix' => '@',    // para distinguir entre os nós e os atributos com o mesmo nome
        'alwaysArray' => array(),    // array de tags que devem sempre ser array
        'autoArray' => true,         // só criar arrays para as tags que aparecem mais de uma vez
        'textContent' => '$',        // chave utilizada para o conteúdo do texto de elementos
        'autoText' => true,          // pular chave "textContent" se o nó não tem atributos ou nós filho
        'keySearch' => false,        // pesquisa opcional e substituir na tag e nomes de atributos
        'keyReplace' => false        // substituir valores por valores acima de busca
    );
    $options = array_merge($defaults, $options);
    $namespaces = $xml->getDocNamespaces();
    $namespaces[''] = null; // adiciona namespace base(vazio) 
    // Obtém os atributos de todos os namespaces
    $attributesArray = array();
    foreach ($namespaces as $prefix => $namespace) {
        foreach ($xml->attributes($namespace) as $attributeName => $attribute) {
            // Substituir caracteres no nome do atributo
            if ($options['keySearch']) $attributeName =
                    str_replace($options['keySearch'], $options['keyReplace'], $attributeName);
            $attributeKey = $options['attributePrefix']
                    . ($prefix ? $prefix . $options['namespaceSeparator'] : '')
                    . $attributeName;
            $attributesArray[$attributeKey] = (string)$attribute;
        }
    }
    // Obtém nós filhos de todos os namespaces
    $tagsArray = array();
    foreach ($namespaces as $prefix => $namespace) {
        foreach ($xml->children($namespace) as $childXml) {
            // Recursividade em nós filho
            $childArray = xmlToArray($childXml, $options);
            list($childTagName, $childProperties) = legacy_each($childArray);
            // Substituir caracteres no nome da tag
            if ($options['keySearch']) $childTagName =
                    str_replace($options['keySearch'], $options['keyReplace'], $childTagName);
            // Adiciona um prefixo namespace, se houver
            if ($prefix) $childTagName = $prefix . $options['namespaceSeparator'] . $childTagName;
            if (!isset($tagsArray[$childTagName])) {
                // Só entra com esta chave
                // Testa se as tags deste tipo deve ser sempre matrizes, não importa a contagem de elementos
                $tagsArray[$childTagName] =
                        in_array($childTagName, $options['alwaysArray']) || !$options['autoArray']
                        ? array($childProperties) : $childProperties;
            } elseif (
                is_array($tagsArray[$childTagName]) && array_keys($tagsArray[$childTagName])
                === range(0, count($tagsArray[$childTagName]) - 1)
            ) {
                $tagsArray[$childTagName][] = $childProperties;
            } else {
                $tagsArray[$childTagName] = array($tagsArray[$childTagName], $childProperties);
            }
        }
    }
    // Obtém o texto do nó
    $textContentArray = array();
    $plainText = trim((string)$xml);
    if ($plainText !== '') $textContentArray[$options['textContent']] = $plainText;
    $propertiesArray = !$options['autoText'] || $attributesArray || $tagsArray || ($plainText === '')
            ? array_merge($attributesArray, $tagsArray, $textContentArray) : $plainText;
    // Retorna o nó como array
    return array(
        $xml->getName() => $propertiesArray
    );
  }
  $url_positron = URL_POSITRON;
  $curl_positron = curl_init($url_positron);
  curl_setopt($curl_positron, CURLOPT_URL, $url_positron);
  curl_setopt($curl_positron, CURLOPT_POST, true);
  curl_setopt($curl_positron, CURLOPT_RETURNTRANSFER, true);
  $headers_positron = array(
     "Content-Type: text/plain",
  );
  curl_setopt($curl_positron, CURLOPT_HTTPHEADER, $headers_positron);
  $data_positron=' 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pos="http://pst.com.br/position.xsd">
      <soapenv:Header/>
      <soapenv:Body>
        <pos:getOccurrences>
          <request>
            <username>'.USER_POSITRON.'</username>
            <password>'.KEY_POSITRON.'</password>
            <queuename>'.FILA_POSITRON.'</queuename>
          </request>
        </pos:getOccurrences>
      </soapenv:Body>
    </soapenv:Envelope>';
  curl_setopt($curl_positron, CURLOPT_POSTFIELDS, $data_positron);
  curl_setopt($curl_positron, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($curl_positron, CURLOPT_SSL_VERIFYPEER, false);
  $resposta_positron = curl_exec($curl_positron);
  curl_close($curl_positron);
  if(isset($resposta_positron)){
    $fopenXml=fopen('xml/positron.xml','w');
    $fwriteXml=fwrite($fopenXml,$resposta_positron);
    fclose($fopenXml);
    $xml = simplexml_load_string($resposta_positron);
    $array = xmlToArray($xml);
    //print_r($array);
    $dados_positron=array();
    foreach ($array['Envelope']['SOAP-ENV:Body']['pst:OccurrenceResponse'] as $value){ 
      foreach ($value as $val){ 
        $xml = simplexml_load_string($val);
        $arrayData = xmlToArray($xml);
        if(isset($arrayData['position']['pack']['GPS']['lat']) and isset($arrayData['position']['pack']['GPS']['long']) and isset($arrayData['position']['pack']['GPS']['address']))
        {
          $veicTag=$arrayData['position']['pack']['@veicTag'];
          $dateGPS=date('d-m-Y H:i:s',strtotime($arrayData['position']['pack']['GPS']['@dateSystem']));
          $lat=$arrayData['position']['pack']['GPS']['lat'];
          $long=$arrayData['position']['pack']['GPS']['long'];
          $address=$arrayData['position']['pack']['GPS']['address'];
          if(intval($arrayData['position']['pack']['panel']['speed'])>0){$nos=intval($arrayData['position']['pack']['panel']['speed']/1.852);}else{$nos=0;}          
          if(isset($arrayData['position']['pack']['@event'])){$event=$arrayData['position']['pack']['@event'];}else{$event='0';}
          $address=$arrayData['position']['pack']['GPS']['address'];
          $dados_positron[$veicTag]['evento']=$event;
          $dados_positron[$veicTag]['velocidade']=$nos;
          $dados_positron[$veicTag]['data']=$dateGPS;
          $dados_positron[$veicTag]['lat']=$lat;
          $dados_positron[$veicTag]['lng']=$long;
          $dados_positron[$veicTag]['local']=$address;
        }
      }
    }
    ksort($dados_positron);
    $json=json_encode($dados_positron);
    $fopenJson=fopen('json/positron.json','w');
    $fwriteJson=fwrite($fopenJson,$json);
    fclose($fopenJson);
    $alt=$incl=0;
    foreach($dados_positron as $value => $z){  
      $placa=trim($value);
      $diahora=mudaData(trim($z['data']));
      $evento=intval($z['evento']);
      $lat=floatval($z['lat']);
      $long=floatval($z['lng']);
      $local=$z['local'];
      //echo $placa.'-->'.$dia.'-->'.$evento.'-->'.$lat.'-->'.$long.'-->'.$local.'<br>';
      $sql1 = "SELECT * FROM positron where placa = '$placa'";
      $query1 = $conn->query($sql1);
      if ($query1->num_rows == 0){ 
        $sql2 = "INSERT INTO positron (placa, dia, evento, latitude, longitude, localizacao) VALUES ('".$placa."', STR_TO_DATE('$diahora','%d-%m-%Y %H:%i:%s'), ".$evento.", ".$lat.", ".$long.", '".$local."')";
        if (!mysqli_query($conn, $sql2)) { 
          echo "Error: " . $sql2 . "<br>" . mysqli_error($conn);
        }else{$incl++;}    
      }else{
        $sql3 = mysqli_query($conn,"UPDATE positron SET dia=STR_TO_DATE('$diahora','%d-%m-%Y %H:%i:%s'), evento=".$evento.", latitude=".$lat.", longitude=".$long.", localizacao='".$local."' WHERE placa = '$placa'");
        $alt++;
      }
    }
    $logs="datetime: ".$DT1."; Incluídas: ".$incl."; Alteradas: ".$alt;
  }else{
    $logs="datetime: ".$DT1."; Fim SEM ocorrências!";
  }
  $fopen  = fopen('logs/positron.txt','a');
  $fwrite = fwrite($fopen,$logs.PHP_EOL);
  fclose($fopen);
?>