示例#1
0
 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>");
     }
 }
示例#2
0
 /**
  * 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;
 }