Path: C:\
<?php
ini_set('max_execution_time', 259200);
ini_set('memory_limit', '-1');
date_default_timezone_set('America/Sao_Paulo');
// Recebe dados via POST (imagens base64 do Chart.js) ou GET (fluxo legado)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Novo fluxo: receber imagens do Chart.js como base64
$input = json_decode(file_get_contents('php://input'), true);
$inicio = $input['inicio'] ?? '';
$hrini = $input['horainicio'] ?? '';
$fim = $input['fim'] ?? '';
$hrfim = $input['horafim'] ?? '';
$rt = $input['rt'] ?? '';
$min = $input['min'] ?? '';
$max = $input['max'] ?? '';
$graficoB64 = $input['grafico_base64'] ?? '';
$grafico2B64 = $input['grafico2_base64'] ?? '';
$media = $input['media'] ?? 0;
$minima = $input['minima'] ?? 0;
$maxima = $input['maxima'] ?? 0;
$Umedia = $input['Umedia'] ?? 0;
$Uminima = $input['Uminima'] ?? 0;
$Umaxima = $input['Umaxima'] ?? 0;
// Salvar imagens do Chart.js
if ($graficoB64) {
$imgData = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $graficoB64));
file_put_contents('images/grafico.png', $imgData);
}
if ($grafico2B64) {
$imgData2 = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $grafico2B64));
file_put_contents('images/grafico2.png', $imgData2);
}
// Gerar quali3.txt para o PDF
$dia_ini = date('d-m-Y', strtotime($inicio));
$dia_fim = date('d-m-Y', strtotime($fim));
$limite = strtotime($fim);
$lim = ($limite >= 1680220800) ? 'novo' : 'velho';
$linha = [];
$linha[0] = ['', '', ''];
$linha[1] = [$dia_ini . ' as ' . $hrini, $dia_fim . ' as ' . $hrfim, ''];
$linha[2] = [$hrini, $hrfim, ''];
$linha[3] = [$min, $max, $rt];
$linha[4] = ['', '', '1'];
$file_txt = fopen('quali3.txt', 'w');
for ($i = 0; $i <= 4; ++$i) {
fwrite($file_txt, $linha[$i][0] . ';' . $linha[$i][1] . ';' . $linha[$i][2] . PHP_EOL);
}
fclose($file_txt);
// Retornar URL para abrir o PDF
header('Content-Type: application/json');
echo json_encode([
'success' => true,
'pdf_url' => 'RelatorioGrafico.php?media=' . $media . '&minima=' . $minima . '&maxima=' . $maxima . '&Umedia=' . $Umedia . '&Uminima=' . $Uminima . '&Umaxima=' . $Umaxima . '&limite=' . $lim,
]);
exit;
}
// ──── FLUXO LEGADO (GET) ────
// Mantido para compatibilidade caso seja chamado diretamente
$inicio = filter_input(INPUT_GET, 'inicio');
$hrini = filter_input(INPUT_GET, 'horainicio');
$fim = filter_input(INPUT_GET, 'fim');
$hrfim = filter_input(INPUT_GET, 'horafim');
$rt = filter_input(INPUT_GET, 'rt');
$via = filter_input(INPUT_GET, 'via');
$min = filter_input(INPUT_GET, 'min');
$max = filter_input(INPUT_GET, 'max');
$data1 = $inicio.' '.$hrini.':00';
$data2 = $fim.' '.$hrfim.':00';
$dia_ini = date('d-m-Y',strtotime($inicio));
$dia_fim = date('d-m-Y',strtotime($fim));
$limite = strtotime($fim);
if ($limite>=1680220800){$lim='novo';}else{$lim='velho';}
$linha[0][0]='';$linha[0][1]='';$linha[0][2]='';
$linha[1][0]=$dia_ini.' as '.$hrini;$linha[1][1]=$dia_fim.' as '.$hrfim;$linha[1][2]='';
$linha[2][0]=$hrini;$linha[2][1]=$hrfim;$linha[2][2]='';
$linha[3][0]=$min;$linha[3][1]=$max;$linha[3][2]=$rt;
$linha[4][0]='';$linha[4][1]='';$linha[4][2]=$via;
$file_txt = fopen('quali3.txt', 'w');
for ($i=0;$i<=4;++$i){
$linha2=$linha[$i][0].';'.$linha[$i][1].';'.$linha[$i][2].PHP_EOL;
fwrite($file_txt, $linha2);
}
fclose($file_txt);
require_once("../conexao_mysql_locaweb.php");
require_once('phplot.php');
require_once('prune_labels.php');
$plot = new PHPlot(850,250);
$sql = "SELECT FROM_UNIXTIME(dia_hora) AS dia, temperatura FROM sitrad WHERE id_arm='$rt' AND FROM_UNIXTIME(dia_hora) BETWEEN '$data1' AND '$data2' AND temperatura>0 ORDER BY dia ASC";
if (!$query = mysqli_query($conn3, $sql)){
echo "<script type=\"text/javascript\">alert(\"Erro no Banco de Dados!\");window.close();opener.location.href='index.php';</script>";}
else{
$num= mysqli_num_rows($query);
if($num==0){
echo "<script type=\"text/javascript\">alert(\" ".$sql." Sem dados TEMPERATURA para esse período!\");window.close();opener.location.href='index.php';</script>";}
else{
$z=0;$tt=0;$minima=99;$maxima=0;$i='s';$b=0;
if ($min<0 and $max<0){$range=abs($min)-abs($max);}
else{
if ($max>=0 and $min>=0){ $range=$max-$min;}
else{
if ($min<0 and $max>=0){ $range=abs($min)+$max;}
else{ $range=0;}
}
}
if ($range>3){$range=3;}
while($row = $query->fetch_assoc()) {
$grafico[$z][0]=strtotime($row['dia']);
$grafico[$z][1]=$min;
$grafico[$z][2]=$max;
$grafico[$z][3]=$row['temperatura'];
if ($via==1)
{ if ($max>=0 and $min>=0)
{ if($grafico[$z][3]>$max)
{ $dif=$grafico[$z][3]-$max;
if($dif>$range)
{ $dif=$range-($dif/(intval($dif-$range)+1.5));}
$grafico[$z][3]=$max-$dif;
}
if($grafico[$z][3]<$min)
{ $dif=$min-$grafico[$z][3];
if($dif>$range)
{ $dif=$range-($dif/$range);}
$grafico[$z][3]=$min+$dif;
}
}
else
{ if ($min<0 and $max<0)
{ if($grafico[$z][3]>$max)
{ if($grafico[$z][3]<0)
{ $dif=abs($max)-abs($grafico[$z][3]);}
else
{ $dif=$grafico[$z][3]+abs($max);}
if($dif>$range)
{ $dif=$range-($dif/($dif-$range));}
$grafico[$z][3]=$min+$dif;
}
if($grafico[$z][3]<$min)
{ $dif=$min-$grafico[$z][3];
if($dif>$range)
{ $dif=$range-($dif/$range);}
$grafico[$z][3]=$max-$dif;
}
}
else
{ if($grafico[$z][3]>$max)
{ $dif=$grafico[$z][3]-$max;
if($dif>$range)
{ $dif=$range-($dif/(intval($dif-$range)+1.5));}
$grafico[$z][3]=$max-$dif;
}
if($grafico[$z][3]<$min)
{ $dif=$min-$grafico[$z][3];
if($dif>$range)
{$dif=$range-($dif/$range);}
$grafico[$z][3]=$max-$dif;
}
}
}
}
$tt=$tt+$grafico[$z][3];
if ($grafico[$z][3]<$minima){$minima=$grafico[$z][3];}
if ($grafico[$z][3]>$maxima){$maxima=$grafico[$z][3];}
$z++;
}
$media=$tt/$z;
if($min>=$minima){$miy=$minima-2;}else{$miy=$min-2;}
if($max<=$maxima){$may=$maxima+2;}else{$may=$max+2;}
prune_labels($grafico, 20);
$plot->SetDataValues($grafico);
$plot->SetXTitle('Data e Hora');
$plot->SetYTitle('Temperatura');
$plot->SetDataColors(array('blue', 'red', 'green'));
$plot->SetPlotType('lines');
$plot->SetLineWidths(2);
$plot->SetLineStyles(array('solid','solid','solid'));
$plot->SetYTickIncrement(2);
$plot->SetXLabelAngle(90);
$plot->SetXLabelType('time', '%d/%m %H:%M');
$plot->SetXTickLabelPos('none');
$plot->SetPlotBorderType('left');
$plot->SetXTickPos('none');
$plot->SetLegendStyle('left','left');
$plot->SetLegend(array('Minima',utf8_decode('Máxima'), 'Leitura'));
$plot->SetPlotAreaWorld(null, $miy, null, $may);
$plot->SetLegendPixels(783, 3);
$plot->SetPrintImage(false);
$plot->DrawGraph();
$imagem = $plot->EncodeImage('raw');
$fp = fopen("images/grafico.png", "w");
fwrite($fp, $imagem);
fclose($fp);
}
}
$plot2 = new PHPlot(850,250);
$sql2 = "SELECT FROM_UNIXTIME(dia_hora) AS dia, umidade FROM sitrad WHERE id_arm='$rt' AND FROM_UNIXTIME(dia_hora) BETWEEN '$data1' AND '$data2' AND umidade>0 ORDER BY dia ASC";
if (!$query2 = mysqli_query($conn3, $sql2)){
echo "<script type=\"text/javascript\">alert(\"Erro no Banco de Dados!\");window.close();opener.location.href='index.php';</script>";}
else{
$num2= mysqli_num_rows($query2);
if($num2==0){
echo "<script type=\"text/javascript\">alert(\"Sem dados UMIDADE para esse período!\");window.close();opener.location.href='index.php';</script>";}
else{
$z=0;$tt=0;$Uminima=99;$Umaxima=0;
while($row2 = $query2->fetch_assoc()) {
$grafico2[$z][0]=strtotime($row2['dia']);
$grafico2[$z][1]=0;
$grafico2[$z][2]=0;
$grafico2[$z][3]=$row2['umidade'];
$tt=$tt+$grafico2[$z][3];
if ($grafico2[$z][3]<$Uminima){$Uminima=$grafico2[$z][3];}
if ($grafico2[$z][3]>$Umaxima){$Umaxima=$grafico2[$z][3];}
$z++;
}
$Umedia=$tt/$z;
$plot2->SetDataValues($grafico2);
$plot2->SetXAxisPosition($Umaxima+1);
$plot2->SetYTitle('Umidade %');
$plot2->SetDataColors(array('blue', 'red', 'green'));
$plot2->SetPlotType('lines');
$plot2->SetLineWidths(2);
$plot2->SetLineStyles(array('solid','solid','solid'));
$plot2->SetYTickIncrement(5);
$plot2->SetXTickPos('none');
$plot2->SetXTickLabelPos('none');
$plot2->SetXDataLabelPos('none');
$plot2->SetPlotBorderType('left');
$plot2->SetPlotAreaWorld(null, $Uminima, null, $Umaxima+1);
$plot2->SetPrintImage(false);
$plot2->DrawGraph();
$imagem2 = $plot2->EncodeImage('raw');
$fp2 = fopen("images/grafico2.png", "w");
fwrite($fp2, $imagem2);
fclose($fp2);
}
}
echo "<script language='JavaScript'>window.close();window.open('RelatorioGrafico.php?media=".$media."&minima=".$minima."&maxima=".$maxima."&Umedia=".$Umedia."&Uminima=".$Uminima."&Umaxima=".$Umaxima."&limite=".$lim."');</script>";
?>