Foros del Web » Programando para Internet » PHP »

error_reporting y E_NOTICE

Estas en el tema de error_reporting y E_NOTICE en el foro de PHP en Foros del Web. Hola, estoy implementado mi propio controlador de errores con la función set_error_handler y tengo el siguiente problema. En principio, al poner E_ALL ^ E_NOTICE con ...
  #1 (permalink)  
Antiguo 08/05/2008, 10:54
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 6 meses
Puntos: 19
error_reporting y E_NOTICE

Hola, estoy implementado mi propio controlador de errores con la función set_error_handler y tengo el siguiente problema.
En principio, al poner E_ALL ^ E_NOTICE con la función error_reporting no debería reportar los NOTICES pero sí lo hace. Tambien he probado con E_ALL & ~E_NOTICE.

¿Alguien se le ocurre por qué me llegan los E_NOTICE?
Código PHP:
    // establecemos qué errores seran reportados

        
error_reporting(E_ALL E_NOTICE);
        
    
// establecemos la funcion que tratará los errores
    
        
set_error_handler'errorHandler' );
        
    
// funcion que trata los errores
    
        
function errorHandler$errno$errstr$errfile$errline$errcontext 
        {
        
// error types
            
$errortype = array (
                
E_ERROR              => 'Error',
                
E_WARNING            => 'Warning',
                
E_PARSE              => 'Parsing Error',
                
E_NOTICE             => 'Notice',
                
E_CORE_ERROR         => 'Core Error',
                
E_CORE_WARNING       => 'Core Warning',
                
E_COMPILE_ERROR      => 'Compile Error',
                
E_COMPILE_WARNING    => 'Compile Warning',
                
E_USER_ERROR         => 'User Error',
                
E_USER_WARNING       => 'User Warning',
                
E_USER_NOTICE        => 'User Notice',
                
E_STRICT             => 'Runtime Notice',
                
E_RECOVERABLE_ERROR  => 'Catchable Fatal Error'
            
);
              
        
// error threshold
            
$threshold = array( 
                                
=> E_USER_ERROR 
                                
=> E_USER_WARNING E_USER_ERROR ,  
                                
=> E_ALL
                        
);
              
        
// save message into log
        
            
if( CFG_ERROR_LOG_REGISTER
             
&& ($threshold[CFG_ERROR_LOG_THRESHOLD] & $errno) == $errno )
            {
            
// create error message
                
$error_msg =  "[".date("d-m-Y H:i:s")."] - ".$errortype[$errno]." - $errfile, line $errline";
                
$error_msg .= "\n$errstr";
    
                if( isset(
$errcontext['this']) ) 
                {
                    if( 
is_object($errcontext['this']) )
                    {
                       
$classname get_class($errcontext['this']);
                       
$parentclass get_parent_class($errcontext['this']);
                       
$error_msg .= "\nObject/Class: '$classname', Parent Class: '$parentclass'";
                    }
                }
                
                
$error_msg .= "\n\n";
                
            
$fichero FICHERO_REGISTRO_ERRORES;
                
                
            
// guardamos el mensaje en el fichero
            
                
file_put_contents($fichero$error_msgFILE_APPEND);
            }
            
        } 
// end function errorHandler 
Para añadir información, decir que la directiva error_reporting en el php.ini está en E_ALL & ~E_NOTICE.
La constante CFG_ERROR_LOG_THRESHOLD está en 3. Es decir, guardar todos los errores que le lleguen.
La constante CFG_ERROR_LOG_REGISTER es un flag para activar o desactivar el registro de errores en fichero.
  #2 (permalink)  
Antiguo 08/05/2008, 11:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: error_reporting y E_NOTICE

Hola jerkan,

Si lees el manual:
Cita:
Iniciado por Manual de PHP
tipos_error

Puede ser usado para aplicar una máscara a las llamadas de la función error_handler tal y como el parámetro ini error_reporting controla qué errores son mostrados. Sin esta máscara definida, el gestor_errores será llamado para cada error sin importar el valor del parámetro error_reporting.
Encontraras el porqué.

Saludos.
  #3 (permalink)  
Antiguo 08/05/2008, 14:24
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 6 meses
Puntos: 19
Re: error_reporting y E_NOTICE

Gracias GatorV,

efectivamente no leí ese apartado.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:29.