Time of page processing

Asked

Viewed 39 times

0

Well, I have a function that when implemented with direct values per code processes quite fast but when it receives values by http request the page takes a lot of time to be processed (I spent more than 15 minutes with the page being processed).

What should I do?

The code is as follows::

<?php

ini_set('max_execution_time', 0);
//CALCULANDO DIAS NORMAIS
/*Abaixo vamos calcular a diferença entre duas datas. Fazemos uma reversão da maior sobre a menor 
para não termos um resultado negativo. */
function CalculaDias($xDataInicial, $xDataFinal){
   $time1 = dataToTimestamp($xDataInicial);  
   $time2 = dataToTimestamp($xDataFinal);  

   $tMaior = $time1>$time2 ? $time1 : $time2;  
   $tMenor = $time1<$time2 ? $time1 : $time2;  

   $diff = $tMaior-$tMenor;  
   $numDias = $diff/86400; //86400 é o número de segundos que 1 dia possui  
   return $numDias;
}

//LISTA DE FERIADOS NO ANO
/*Abaixo criamos um array para registrar todos os feriados existentes durante o ano.*/
function Feriados($ano,$posicao){
   $dia = 86400;
   $datas = array();
   $datas['pascoa'] = easter_date($ano);
   $datas['sexta_santa'] = $datas['pascoa'] - (2 * $dia);
   $datas['carnaval'] = $datas['pascoa'] - (47 * $dia);
   $datas['corpus_cristi'] = $datas['pascoa'] + (60 * $dia);
   $feriados = array (
      '01/01',
      date('d/m',$datas['carnaval']),
      date('d/m',$datas['sexta_santa']),
      date('d/m',$datas['pascoa']),
      '25/04',
      '01/05',
      '10/06',
      date('d/m',$datas['corpus_cristi']),
      '15/08', 
      '05/10',
      '01/11',
      '01/12',
      '08/12',
      '25/12',


   );

return $feriados[$posicao]."/".$ano;
}      

//FORMATA COMO TIMESTAMP
/*Esta função é bem simples, e foi criada somente para nos ajudar a formatar a data já em formato  TimeStamp facilitando nossa soma de dias para uma data qualquer.*/
function dataToTimestamp($data){
   $ano = substr($data, 6,4);
   $mes = substr($data, 3,2);
   $dia = substr($data, 0,2);
return mktime(0, 0, 0, $mes, $dia, $ano);  
} 

//SOMA 01 DIA   
function Soma1dia($data){   
   $ano = substr($data, 6,4);
   $mes = substr($data, 3,2);
   $dia = substr($data, 0,2);
return   date("d/m/Y", mktime(0, 0, 0, $mes, $dia+1, $ano));
}


//CALCULA DIAS UTEIS
/*É nesta função que faremos o calculo. Abaixo podemos ver que faremos o cálculo normal de dias ($calculoDias), após este cálculo, faremos a comparação de dia a dia, verificando se este dia é um sábado, domingo ou feriado e em qualquer destas condições iremos incrementar 1*/

function DiasUteis($yDataInicial,$yDataFinal){

   $diaFDS = 0; //dias não úteis(Sábado=6 Domingo=0)
   $calculoDias = CalculaDias($yDataInicial, $yDataFinal); //número de dias entre a data inicial e a final
   $diasUteis = 0;

   while($yDataInicial!=$yDataFinal){
      $diaSemana = date("w", dataToTimestamp($yDataInicial));
      if($diaSemana==0 || $diaSemana==6){
         //se SABADO OU DOMINGO, SOMA 01
         $diaFDS++;
      }else{
      //senão vemos se este dia é FERIADO
         for($i=0; $i<=12; $i++){
            if($yDataInicial==Feriados(date("Y"),$i)){
               $diaFDS++;   
            }
         }
      }
      $yDataInicial = Soma1dia($yDataInicial); //dia + 1
   }
return $calculoDias - $diaFDS;
}

if(isset($_POST['dferiasinicial']) && $isset($_POST['dferiasfinal'])){

$datai=date("d-m-Y", strtotime($_POST['dferiasinicial'])); // converte a data para o formato indicado
$dataf=date("d-m-Y", strtotime($_POST['dferiasfinal'])); // converte a data para o formato indicado


$diasUteis = DiasUteis($datai, $dataf);
$diasNormal = CalculaDias($datai, $dataf); 

echo "diasuteis : ".$diasuteis; 
echo "diasnormais : ".$diasNormal;

}


<!DOCTYPE html>
<html>
<head>
   <title>Ferias</title>
   <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

</head>
<body>
   <form method="post">
      <div class="form-group">
         <label for="dferiasinicial">Data de férias inicial</label>
         <input type="date" class="form-control" id="dferiasinicial" name="dferiasinicial" placeholder="Insira a data de inicio das suas ferias">
      </div>
      <div class="form-group">
         <label for="dferiasfinal">Data de férias final</label>
         <input type="date" class="form-control" id="dferiasfinal" name="dferiasfinal" placeholder="Insira a data de fim das suas ferias">
      </div>
      <button type="submit" class="btn btn-primary">Submit</button>
   </form>
</body>
</html>
  • 1

    In my opinion you should save the days that are bank holidays. Thus, you would not need to process this data every time there is a new call.

  • By http request you mean you are receiving a request from another server? This may be the problem of the distance between the servers and/or the server itself that takes time to respond to an external request. I think this has nothing to do with your PHP code

  • One suggestion is that you use the PHP Datetime library to optimize your date calculations. http://php.net/manual/en/class.datetime.php

  • By http request I mean I am sending the data through a form instead of putting it directly by code.

  • I’m only using 1 server

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.