2010-03-27 13 views
5

¿Cómo puedo saber durante el tiempo de ejecución que mi código arrojó una advertencia?errores no controlados en php

ejemplo

try { 
    echo (25/0); 
} catch (exception $exc) { 
    echo "exception catched"; 
} 

lanza una "Advertencia: La división por cero" de error que no puedo manejar en mi código.

Respuesta

7

Está buscando la función set_error_handler(). http://ch.php.net/set_error_handler Consulte el código de muestra en el manual.

Asegúrese de no solo suprimir las advertencias de error, sino redirigirlas silenciosamente a un archivo de registro o algo similar. (Esto ayuda a localizar a los insectos)

+0

Al apagar lo que dijo @svens, la supresión de errores para desactivar todos los errores se hace con 'error_reporting (0)' Vea http://us.php.net/manual/en/errorfunc.configuration. php # ini.error-reporting –

+0

.. o anteponiendo un '@' al comando. Por cierto. el controlador de errores también se invocará cuando error_reporting se establezca en cero (con errno = 0). El controlador de errores es muy útil y se puede usar para hacer cosas como el registro final de tiempo, parámetros, uso de memoria, etc. y notificar al administrador (para errores fatales). No quería recomendar la supresión de errores :). – svens

5

Es necesario controlar la excepción a sí mismo como follows.e.g

function inverse($x) 
{ 
    if(!$x) 
    { 
     throw new Exception('Division by zero.'); 
    } 
    else 
    { 
     return 1/$x; 
    } 
} 


try 
{ 
    echo inverse(5); 
    echo inverse(0); 
} 
catch (Exception $e) 
{ 
    echo $e->getMessage(); 
} 
+0

has entendido mal cómo funcionan las excepciones – user187291

+0

@ stereofrog, gracias por la nota. Estoy tratando de dejarlo en claro. – Young

+0

el propósito de las excepciones no es "prevenir" que ocurran errores, como lo hace usted, sino proporcionar una forma de manejarlos cuando ocurran. Aún así, +1 por intentarlo. – user187291

2

Necesita instalar un controlador de errores que convierte php "errores" viejo estilo en excepciones. Vea un ejemplo here

Cuestiones relacionadas