Ir para conteúdo
Fórum Script Brasil
  • 0

Data real do sistema, como ler com PHP


Fernando Lima (IPIS)

Pergunta

Olá pessoal, meu primeiro post aqui!

Me chamo Fernando e tenho um conhecimento que classifico como médio em PHP, mas agora, desenvolvendo um sistema de validacão que usarei em todos os sistemas que desenvolvo para terceiros aqui na cidade a fim de me proteger de roubo de codigo e etc..., me deparei com um problema:

O Problema:

Preciso saber a data correta do sistema operacional do servidor ou da máquina em que esta sendo executado o sistema, claro, para impedir que alterações de data no relógio do Windows, por exemplo, burlem o sistema.

O que já sei fazer?

Sei que o arquivo do Windows, bootstat.dat, como muitos devem saber, grava na sua informação de ultima modificação, a data do sistema quando o usuário efetua login no Windows, assim sendo, pretendo usar a função filemtime() para pegar esta data, isso já é bem melhor que usar date(). :)

No que preciso de ajuda?

1) Como acessar este arquivo já que ele está fora do meu httpdocs?

2) Que arquivo usar nesta mesma operação para plataforma Linux?

CÓDIGO PRA FACILITAR O ENTENDIMENTO DA FUNCAO:

// Verifica se a Validaao esta ligada e se já foi executada nesta sessao
If (VAL && !$Executado)
   {
     $_SESSION['SQL']                  = 'SELECT Token FROM '.SIS_TabSIS.' WHERE SIS = "'.SIS_Titulo.'"';
     $Token                            = MySQL_Resultado('Token') OR Die (MySQL_Erro());
     $Token                            = SIS_Decode($Token);
     $URL                              = VAL_Link.'?sID='.SIS_ID;
     $Curl                             = curl_init($URL);
                                         curl_setopt($Curl, CURLOPT_RETURNTRANSFER, 1);
                                         curl_setopt($Curl, CURLOPT_CONNECTTIMEOUT, 30);
                                         curl_setopt($Curl, CURLOPT_USERPWD, $Token);
     $Retorno                          = curl_exec($Curl);
                                         curl_close($Curl);
     $Curl_RT                          = @explode(':', SIS_Decode($Retorno));

     If ($Curl_RT[0] == 0)
        {
          $RT['Erro']                  = 1; // Erro no curl
          $RT['Data']                  = 'Curl';
          Return $RT;
        }

     /* LICENCA */
     $_SESSION['SQL']                  = 'SELECT Licenca, Licenca_Tipo, Licenca_Data FROM '.SIS_TabSIS.' WHERE SIS = "'.SIS_Titulo.'"';
     If (MySQL_Linhas())
        {
          $RG                          = MySQL_Array();

          // VALIDA OS DADOS DA LICENCA NO DB, SE DIVERGE, ATUALIZA PARA OS DADOS DO SERVIDOR
          If ( (SIS_Decode($RG['Licenca']) != $Curl_RT[1]) || (SIS_Decode($RG['Licenca_Tipo']) != $Curl_RT[2]) || (SIS_Decode($RG['Licenca_Data']) != $Curl_RT[3]))
             {
               $_SESSION['SQL']        = 'UPDATE '.SIS_TabSIS.' SET Licenca = "'.SIS_Encode($Curl_RT[1]).'", Licenca_Tipo = "'.SIS_Encode($Curl_RT[2]).'", Licenca_Data = "'.SIS_Encode($Curl_RT[3]).'" WHERE SIS = "'.SIS_Titulo.'"';
                                         MySQL_Consulta() OR Die (MySQL_Erro());
               $_SESSION['SQL']        = 'SELECT Licenca, Licenca_Tipo, Licenca_Data FROM '.SIS_TabSIS.' WHERE SIS = "'.SIS_Titulo.'"';
               $RG                     = MySQL_Array();
             }

          // GRAVA AS INFORMACOES DA VALIDACAO
          $varData                     = date('d/m/Y');
          $varHora                     = date('H:i');
          // Banco de Dados
          $_SESSION['SQL']             = 'UPDATE '.SIS_TabSIS.' SET Validacao_Data = "'.SIS_Encode($varData).'",
                                                                    Validacao_Hora = "'.SIS_Encode($varHora).'",
                                                                    Validacao_Retorno = "'.$Retorno.'",
                                                                    Validacao_Status = "'.SIS_Encode($Curl_RT[0]).'"
                                                              WHERE SIS = "'.SIS_Titulo.'"';
                                         MySQL_Consulta() OR Die (MySQL_Erro());
          // Sessao
          $_SESSION['SIS']['Validacao']['Executado']       = 1;
          $_SESSION['SIS']['Validacao']['Data']            = SIS_Encode($varData);
          $_SESSION['SIS']['Validacao']['Hora']            = SIS_Encode($varHora);
          $_SESSION['SIS']['Validacao']['Status']          = SIS_Encode($Curl_RT[0]);
          
          // VALIDACAO
          $Data_Curl                   = $Curl_RT[3];
          $Data_Curl_TS                = Geral_DataTS($Curl_RT[3]);
          $Data_Hoje_TS                = Geral_DataTS(date('d/m/Y'));
          
          If ($Data_Hoje_TS > $Data_Curl_TS)
             {
               $RT['Erro']             = 3; // Licenca Expirada
               $RT['Data']             = $Data_Curl;
               Return $RT;
             
             } Else {
                      $RT['Erro']      = 0;
                      $RT['Data']      = 'OK';
                      Return $RT;
                    }
             
        } Else {
                 $_SESSION['SIS']['Validacao']['Executado']       = 0;
                 $RT['Erro']           = 2; // não existe dados na tabela de validacao
                 Return $RT;
               }
               
   } Else {
            $RT['Erro']                = 0;
            $RT['Data']                = 'Validado';
            Return $RT;
          }

Desde já agradeço qualquer luz.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Não seria mais simples você pegar essa informação de um servidor externo? Assim a pessoa modifica no servidor local, mas o que vale é algum outro servidor na internet (claro, nesse caso o servidor local terá que ter acesso à internet).

Link para o comentário
Compartilhar em outros sites

  • 0
Não seria mais simples você pegar essa informação de um servidor externo? Assim a pessoa modifica no servidor local, mas o que vale é algum outro servidor na internet (claro, nesse caso o servidor local terá que ter acesso à internet).

Sim, perfeito, contudo, pode ser que o usuário não tenha acesso a net e esta validação apesar de depender da net também terá uma via local (caso não seja identificada a conexão com a net), tipo, lendo um arquivo com as informações que tem no servidor mas armazenado localmente, neste caso eu teria de ficar atualizando ele periodicamente.

Assim sendo, na via local, continuo precisando saber acessar este arquivo, algo como em C:Windows\xxx/arquivo.txt, e também precisaria acessar o bootstat.dat pra ler a data de modificação! Ai é que está o meu dilema, pois não posso obrigar o cliente a ter net onde deseja rodar o sistema.

Obrigado pelo toque ESerra! Mais alguma sugestão?

Link para o comentário
Compartilhar em outros sites

  • 0
O teu objetivo com isso é exatamente o que? Criar versões trial dos seus scripts?

Validar o uso do sistema enquanto o cliente estiver pagando o parcelamento.

Assim:

Como geralmente os sistemas tem valor superior a um mil reais, eu parcelo, entrego antes do cliente terminar de pagar, assim, preciso liberar o funcionamento do sistema mês a mês até que o cliente complete os pagamentos conforme claúsula contratual que diz que o sistema é de propriedade da minha empresa até que o cliente quite todas as devidas parcelas, ai eu atualizo o sistema para não validar mais, através do envio de uma licença vitalicia.

Essa é a idéia, pois tive um sistema roubado (código) recentemente e levei dois calotes mês passado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...