Location: PHPKode > projects > PhpScribe Documentation Generator > errorHandler.inc
<?
//!-----------------------------------------------------------------
// @function        captureGlobalInfo
// @desc            Captura as informações atuais da página para
//                  montar um snapshot da situação do sistema no
//                  momento em que ocorre um erro
// @returns         info      data, hora, get, post e sessão atual
//!-----------------------------------------------------------------
function captureGlobalInfo()
{
     global $PS_USER_CFG,$PS_LANGUAGE;

     $info = "";
     $getPars = 0;
     $postPars = 0;

     // data e hora
     $info .= date("d/m/Y - H:i:s")."|";

     // parâmetros get
     $getVarsNaming = (isset($PS_LANGUAGE['GET_PARAMETER_NAMING'])) ? $PS_LANGUAGE['GET_PARAMETER_NAMING'] : "Parâmetro Get";
     while (list($key,$value)=each($_GET)) {
          $info .= $getVarsNaming." ".(++$getPars).": ".$key."=>".$value."|";
     }

     // parâmetros post
     $postVarsNaming = (isset($PS_LANGUAGE['POST_PARAMETER_NAMING'])) ? $PS_LANGUAGE['POST_PARAMETER_NAMING'] : "Parâmetro Post";
     while (list($key,$value)=each($_POST)) {
          $info .= $postVarsNaming." ".(++$postPars).": ".$key."=>".$value."|";
     }

     // usuário de sessão
     $sessionUserNaming = (isset($PS_LANGUAGE['SESSION_USER_NAMING'])) ? $PS_LANGUAGE['SESSION_USER_NAMING'] : "Usuário de Sessão";
     if (isset($PS_USER_CFG['SESSION_OBJECT_NAME'])) {
          if (isset($_SESSION[$PS_USER_CFG['SESSION_OBJECT_NAME']])) {
               $SESSION_OBJECT = $_SESSION[$PS_USER_CFG['SESSION_OBJECT_NAME']];
               if (method_exists($SESSION_OBJECT,"getBasicInfo")) {
                    $info .= $sessionUserNaming." : ".$SESSION_OBJECT->getBasicInfo()."|";
               }
          }
     }
     return $info;
}

//------------------------------------------------------------------
// @function        phpScribeErrorHandler
// @desc            Substitui o tratador de erros tradicional do PHP,
//                  buscando informações momentâneas do sistema para
//                  posterior análise das condições do erro
// @param           errno          número do erro
// @param           errmsg         mensagem de erro
// @param           filename       arquivo onde o erro ocorreu
// @param           linenum        número da linha no arquivo
// @param           vars           tabela de símbolos no momento do erro
//------------------------------------------------------------------
function phpScribeErrorHandler ($errno, $errmsg, $filename, $linenum, $vars)
{
     global $PS_USER_CFG,$PS_LANGUAGE;

     // busca da configuração de linguagem o array associativo com os nomes dos tipos de erros
     $errorTypes = $PS_LANGUAGE['ERR_TYPES'];

     // define mensagens de erro que devem ser ignoradas
     $ignoreErrors = array("UNDEFINED INDEX","USE OF UNDEFINED CONSTANT");

     // verifica se o erro capturado não corresponde
     // a algum tipo de erro que deve ser ignorado
     $triggerError = TRUE;
     for ($i=0; $i<count($ignoreErrors); $i++) {
          if (ereg($ignoreErrors[$i],strtoupper($errmsg))) {
               $triggerError = FALSE;
          }
     }
     if ($triggerError) {
          // cria um vetor com os tipos de erros do usuário
          $userErrors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

          // armazena os dados capturados pelo tratador de erros
          // número do erro, tipo do erro, mensagem de erro, arquivo e linha do código
          $err = $errno."|";
          $err .= $errorTypes[$errno]."|";
          $err .= $errmsg."|";
          $err .= $filename."|";
          $err .= $linenum."|";

          // realiza var trace para erros de usuário
          if (in_array($errno, $userErrors)) {
               ob_start();
               var_dump($vars);
               $err .= ob_get_contents();
               ob_end_clean();
          }

          // imprime o erro para visualização
          if ((isset($PS_USER_CFG['SHOW_ERRORS'])) && ($PS_USER_CFG['SHOW_ERRORS'] == TRUE)) {
               friendlyErrorMessage($err,$errorTypes[$errno]);
          }

          // salva no log de erros
          if ((isset($PS_USER_CFG['LOG_ERRORS'])) && ($PS_USER_CFG['LOG_ERRORS'] == TRUE)) {
               if ((isset($PS_USER_CFG['ERROR_LOG_FILE'])) && (is_writeable($PS_USER_CFG['ERROR_LOG_FILE']))) {
                    error_log(captureGlobalInfo().$err."<*>\n", 3, $PS_USER_CFG['ERROR_LOG_FILE']);
               } else {
                    error_log(captureGlobalInfo().$err."<*>\n", 0);
               }
          }

          // cancela a execução do script se o erro for E_USER_ERROR
          if ($errno == E_USER_ERROR) {
               exit;
          }
     }
}

//------------------------------------------------------------------
// @function        friendlyErrorMessage
// @desc            Imprime as informações sobre o erro capturado
// @param           err       dados do erro capturado
// @param           type      tipo do erro capturado
//------------------------------------------------------------------
function friendlyErrorMessage($err,$type) {
     $errData = explode("|",$err);
     echo "<table cellspacing='0' border='1' bordercolor='#000000'>\n".
          "<tr bgcolor='#e2e2e2'><td align='left'><font color='#ff0000'>&nbsp;<b>".strtoupper($type)." :</b></font></td></tr>\n".
          "<tr><td align='left'>".
          "<B>".$errData[2]."</B><BR>".
          "FILE: ".$errData[3].", LINE: ".$errData[4].
          "</td></tr>\n".
          "</table>\n";
}

//------------------------------------------------------------------
// @function        dbErrorHandler
// @desc            Tratador de erros para a bilioteca ADODB
// @param           dbms           nome do banco de dados utilizado
// @param           function       função onde ocorreu o erro
// @param           errno          número do erro de banco
// @param           errmsg         mensagem de erro do banco
// @param           p1             parâmetro 1 (mixed)
// @param           p2             parâmetro 2 (mixed)
//------------------------------------------------------------------
function dbErrorHandler($dbms, $function, $errno, $errmsg, $p1=false, $p2=false)
{
     global $PS_USER_CFG,$PS_LANGUAGE,$SILENT;

     // monta o informativo do erro com o nome do banco utilizado,
     // número e mensagem do erro e função executada
     $err = $dbms."|";
     $err .= $errno."|";
     $err .= $errmsg."|";
     switch($function) {
          case 'EXECUTE':$sql = $p1;
                         $inputparams = $p2;
                         $err .= "$function(\"$sql\")|";
                         break;
          case 'PCONNECT':
          case 'CONNECT':$host = $p1;
                         $database = $p2;
                         $err = "$function($host, '****', '****', $database)|";
                         break;
          default:       $err = "$function($p1, $p2)|";
                         break;
     }

     // imprime o erro para visualização
     if ((isset($PS_USER_CFG['SHOW_ERRORS'])) && ($PS_USER_CFG['SHOW_ERRORS'] == TRUE)) {
          friendlyDbErrorMessage($err,$PS_LANGUAGE['ERR_DATABASE']);
     }

     // salva no log de erros
     if ((isset($PS_USER_CFG['LOG_ERRORS'])) && ($PS_USER_CFG['LOG_ERRORS'] == TRUE)) {
          if ((isset($PS_USER_CFG['DB_ERROR_LOG_FILE'])) && (is_writeable($PS_USER_CFG['DB_ERROR_LOG_FILE']))) {
               error_log(captureGlobalInfo().$err."<*>\n", 3, $PS_USER_CFG['DB_ERROR_LOG_FILE']);
          } else {
               error_log(captureGlobalInfo().$err."<*>\n", 0);
          }
     }

}

//------------------------------------------------------------------
// @function        friendlyDbErrorMessage
// @desc            Imprime as informações sobre o erro de banco
// @param           err       dados do erro capturado
// @param           type      tipo do erro capturado
//------------------------------------------------------------------
function friendlyDbErrorMessage($err,$type) {
     $errData = explode("|",$err);
     echo "<table cellspacing='0' border='1' bordercolor='#000000'>\n".
          "<tr bgcolor='#e2e2e2'><td align='left'><font color='#ff0000'>&nbsp;<b>".strtoupper($type)." :</b></font></td></tr>\n".
          "<tr><td align='left'>".
          "<B>".$errData[2]."</B><BR>".
          "DBMS: ".$errData[0].", ERRNO: ".$errData[1]."<BR>".
          "FUNCTION: ".$errData[3].
          "</td></tr>\n".
          "</table>\n";
}
?>
Return current item: PhpScribe Documentation Generator