function MakeAll() { try { $cronometro = new clsCronometro(); $cronometro->marca('inicio'); $liberado = TRUE; $saida_geral = ''; if ($this->convidado) { @session_start(); $_SESSION['convidado'] = TRUE; $_SESSION['id_pessoa'] = '0'; session_write_close(); } $controlador = new clsControlador(); if ($controlador->Logado() && $liberado || $this->convidado) { $this->Formular(); $this->VerificaPermicao(); $this->CadastraAcesso(); $saida_geral = $this->MakeHeadHtml(); if ($this->renderMenu) { $saida_geral .= $this->MakeBody(); } else { foreach ($this->clsForm as $form) { $saida_geral .= $form->RenderHTML(); } } $saida_geral .= $this->MakeFootHtml(); if ($_GET['suspenso'] == 1 || $_SESSION['suspenso'] == 1 || $_SESSION["tipo_menu"] == 1) { if ($this->renderMenuSuspenso) { $saida_geral = str_replace("<!-- #&MENUSUSPENSO&# -->", $this->makeMenuSuspenso(), $saida_geral); } if ($_GET['suspenso'] == 1) { @session_start(); $_SESSION['suspenso'] = 1; @session_write_close(); } } } elseif (empty($_POST['login']) || empty($_POST['senha']) && $liberado) { $saida_geral .= $this->MakeHeadHtml(); $controlador->Logar(FALSE); $saida_geral .= $this->MakeFootHtml(); } else { $controlador->Logar(TRUE); if ($controlador->Logado() && $liberado) { $this->Formular(); $this->VerificaPermicao(); $this->CadastraAcesso(); $saida_geral = $this->MakeHeadHtml(); $saida_geral .= $this->MakeBody(); $saida_geral .= $this->MakeFootHtml(); } else { $saida_geral = $this->MakeHeadHtml(); $controlador->Logar(false); $saida_geral .= $this->MakeFootHtml(); } } echo $saida_geral; $cronometro->marca('fim'); $tempoTotal = $cronometro->getTempoTotal(); $tempoTotal += 0; $objConfig = new clsConfig(); if ($tempoTotal > $objConfig->arrayConfig["intSegundosProcessaPagina"]) { $conteudo = "<table border=\"1\" width=\"100%\">"; $conteudo .= "<tr><td><b>Data</b>:</td><td>" . date("d/m/Y H:i:s", time()) . "</td></tr>"; $conteudo .= "<tr><td><b>Script</b>:</td><td>{$_SERVER["PHP_SELF"]}</td></tr>"; $conteudo .= "<tr><td><b>Tempo de processamento</b>:</td><td>{$tempoTotal} segundos</td></tr>"; $conteudo .= "<tr><td><b>Tempo max permitido</b>:</td><td>{$objConfig->arrayConfig["intSegundosProcessaPagina"]} segundos</td></tr>"; $conteudo .= "<tr><td><b>URL get</b>:</td><td>{$_SERVER['QUERY_STRING']}</td></tr>"; $conteudo .= "<tr><td><b>Metodo</b>:</td><td>{$_SERVER["REQUEST_METHOD"]}</td></tr>"; if ($_SERVER["REQUEST_METHOD"] == "POST") { $conteudo .= "<tr><td><b>POST vars</b>:</td><td>"; foreach ($_POST as $var => $val) { $conteudo .= "{$var} => {$val}<br>"; } $conteudo .= "</td></tr>"; } elseif ($_SERVER["REQUEST_METHOD"] == "GET") { $conteudo .= "<tr><td><b>GET vars</b>:</td><td>"; foreach ($_GET as $var => $val) { $conteudo .= "{$var} => {$val}<br>"; } $conteudo .= "</td></tr>"; } if ($_SERVER['HTTP_REFERER']) { $conteudo .= "<tr><td><b>Referrer</b>:</td><td>{$_SERVER["HTTP_REFERER"]}</td></tr>"; } $conteudo .= "</table>"; $objMail = new clsEmail($objConfig->arrayConfig['ArrStrEmailsAdministradores'], "[INTRANET - PMI] Desempenho de pagina", $conteudo); $objMail->envia(); } } catch (Exception $e) { $lastError = error_get_last(); @session_start(); $_SESSION['last_error_message'] = $e->getMessage(); $_SESSION['last_php_error_message'] = $lastError['message']; $_SESSION['last_php_error_line'] = $lastError['line']; $_SESSION['last_php_error_file'] = $lastError['file']; @session_write_close(); error_log("Erro inesperado (pego em clsBase): " . $e->getMessage()); NotificationMailer::unexpectedError($e->getMessage()); die("<script>document.location.href = '/module/Error/unexpected';</script>"); } }
/** * Executa uma consulta SQL. * * @param string $consulta Consulta SQL. * @param bool $reescrever (Opcional) SQL é reescrita para transformar * sintaxe MySQL em PostgreSQL. * @return bool|resource FALSE em caso de erro ou o identificador da consulta * em caso de sucesso. */ public function Consulta($consulta, $reescrever = true) { $cronometro = new clsCronometro(); $cronometro->marca('inicio'); if (empty($consulta)) { return FALSE; } else { $this->strStringSQL = $consulta; } $this->strStringSQLOriginal = $this->strStringSQL; $this->Conecta(); if ($this->bDepurar) { printf("<br>Depurar: Frase de Consulta = %s<br>\n", $this->strStringSQL); } // Alterações de padrão MySQL para PostgreSQL if ($reescrever) { // Altera o Limit $this->strStringSQL = eregi_replace("LIMIT[ ]{0,3}([0-9]+)[ ]{0,3},[ ]{0,3}([0-9]+)", "LIMIT \\2 OFFSET \\1", $this->strStringSQL); // Altera selects com YEAR( campo ) ou MONTH ou DAY $this->strStringSQL = eregi_replace("(YEAR|MONTH|DAY)[(][ ]{0,3}(([a-z]|_|[0-9])+)[ ]{0,3}[)]", "EXTRACT( \\1 FROM \\2 )", $this->strStringSQL); // Remove os ORDER BY das querys COUNT() // Altera os LIKE para ILIKE (ignore case) $this->strStringSQL = eregi_replace(" LIKE ", " ILIKE ", $this->strStringSQL); $this->strStringSQL = eregi_replace("([a-z_0-9.]+) +ILIKE +'([^']+)'", "to_ascii(\\1) ILIKE to_ascii('\\2')", $this->strStringSQL); $this->strStringSQL = eregi_replace("fcn_upper_nrm", "to_ascii", $this->strStringSQL); } $temp = explode("'", $this->strStringSQL); for ($i = 0; $i < count($temp); $i++) { // Ignora o que está entre aspas if (!($i % 2)) { // Fora das aspas, verifica se há algo errado no SQL if (eregi("(--|#|/\\*)", $temp[$i])) { $erroMsg = 'Proteção contra injection: ' . date("Y-m-d H:i:s"); echo "<!-- {$this->strStringSQL} -->"; $this->Interrompe($erroMsg); } } } // Executa a Consulta if ($this->executandoEcho) { echo $this->strStringSQL . "\n<br>"; } $this->bConsulta_ID = pg_query($this->bLink_ID, $this->strStringSQL); $this->strErro = pg_result_error($this->bConsulta_ID); $this->bErro_no = $this->strErro == '' ? FALSE : TRUE; $this->iLinha = 0; if (!$this->bConsulta_ID) { if ($this->getThrowException()) { $message = $this->bErro_no ? "({$this->bErro_no}) " . $this->strErro : pg_last_error($this->bLink_ID); $message .= PHP_EOL . $this->strStringSQL; throw new Exception($message); } else { $erroMsg = "SQL invalido: {$this->strStringSQL}<br>\n"; die($erroMsg); if ($this->transactionBlock) { // Nada. } $this->Interrompe($erroMsg); return FALSE; } } $cronometro->marca('fim'); $tempoTotal = $cronometro->getTempoTotal(); $objConfig = new clsConfig(); if ($tempoTotal > $objConfig->arrayConfig['intSegundosQuerySQL']) { $conteudo = "<table border=\"1\" width=\"100%\">"; $conteudo .= "<tr><td><b>Data</b>:</td><td>" . date("d/m/Y H:i:s", time()) . "</td></tr>"; $conteudo .= "<tr><td><b>Script</b>:</td><td>{$_SERVER["PHP_SELF"]}</td></tr>"; $conteudo .= "<tr><td><b>Tempo da query</b>:</td><td>{$tempoTotal} segundos</td></tr>"; $conteudo .= "<tr><td><b>Tempo max permitido</b>:</td><td>{$objConfig->arrayConfig["intSegundosQuerySQL"]} segundos</td></tr>"; $conteudo .= "<tr><td><b>SQL Query Original</b>:</td><td>{$this->strStringSQLOriginal}</td></tr>"; $conteudo .= "<tr><td><b>SQL Query Executado</b>:</td><td>{$this->strStringSQL}</td></tr>"; $conteudo .= "<tr><td><b>URL get</b>:</td><td>{$_SERVER['QUERY_STRING']}</td></tr>"; $conteudo .= "<tr><td><b>Metodo</b>:</td><td>{$_SERVER["REQUEST_METHOD"]}</td></tr>"; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $conteudo .= "<tr><td><b>POST vars</b>:</td><td>"; foreach ($_POST as $var => $val) { $conteudo .= "{$var} => {$val}<br>"; } $conteudo .= "</td></tr>"; } elseif ($_SERVER['REQUEST_METHOD'] == 'GET') { $conteudo .= "<tr><td><b>GET vars</b>:</td><td>"; foreach ($_GET as $var => $val) { $conteudo .= "{$var} => {$val}<br>"; } $conteudo .= "</td></tr>"; } if ($_SERVER['HTTP_REFERER']) { $conteudo .= "<tr><td><b>Referrer</b>:</td><td>{$_SERVER["HTTP_REFERER"]}</td></tr>"; } $conteudo .= "</table>"; $objEmail = new clsEmail($objConfig->arrayConfig['ArrStrEmailsAdministradores'], "[INTRANET - PMI] Desempenho de query", $conteudo); $objEmail->envia(); } return $this->bConsulta_ID; }