2011-03-24 15 views
5

estoy usando PHP 5.3.5 y estoy usandono pueden silenciar los avisos de error imap_open en PHP

$this->[email protected]_open($this->server,$this->username,$this->password); 

El símbolo @ debe silenciar el informe de errores pero, duerma y estoy seguro de que el error se produce en este línea. Quiero que mi aplicación reconozca el problema y reaccione y no reciba ningún error de AVISO, y no puedo desactivar el informe de errores para PHP completo debido a la política de desarrollo de mi empresa.

Sin @ que estoy recibiendo:

imap_open() [function.imap abierta]: No flujo abierto {pop3.seznam.cz:110/pop3}INBOX Con él podría conseguir: Aviso Desconocido: Autenticación fallida (Error de autenticación) (errflg = 1)

Si la información de inicio de sesión es correcta, se abre la conexión y no se producen errores.

Siempre recibo un error de AVISO cuando imap_open no logra conectarse y está jugando con mis resultados JSON. ¿Cómo silenciarlo por favor?

+0

informe no PHP esa línea como la que generó el aviso? @ Deberia trabajar. – Belinda

+1

También sería útil publicar qué aviso ve exactamente. Porque el operador @ realmente debería funcionar. –

+0

por ejemplo: Aviso Desconocido: Autenticación fallida (Autenticación fallida) (errflg = 1) – Ragnar

Respuesta

17

que añade

$this->[email protected]_open($this->server,$this->username,$this->password); 
imap_errors(); 
imap_alerts(); 

y imap_errors(); y imap_alerts(); hacer la magia :)

+0

funcionó perfectamente para mí. Por cierto, también puede asignar las salidas de imap_errors() y imap_alerts() a las matrices e imprimirlas como texto de diagnóstico. – xgretsch

+0

Guau solución fantástica. Trabajó para mi. Gracias @Ragnar. – Raj

0

dos posibilidades vienen a la mente:

  1. También podemos establecer error_reporting en su php.ini, ini_set o .htaccess o similar, de manera que se suprime la notificación, pero ya que wa no su aplicación para manejar el error, probablemente esto no es lo que necesita

  2. Implemente su propio manejo de errores. Esto no es tan difícil de hacer. Usted define una función para el control de errores y luego le dice a PHP que la use en lugar de su propio manejador predeterminado.

    // define

    función myHandler ($ errno, $ cadena_err) {}

    // algún lugar hacia el comienzo de la secuencia de comandos de procesamiento de

    set_error_handler ("myHandler");

Ver set_error_handler para más. También tenga en cuenta que desde el momento en que registra el manejador, usted es el único responsable. Puede suprimir o lanzar cualquier error que necesite/desee.

+0

la primera no es lo que quiero y la segunda tiene aproximadamente el mismo efecto que la primera.No puedo usar nada relacionado con todos los errores php – Ragnar

+1

Establecer el nivel de error_reporting no tiene ningún efecto en esto. Acabo de pasar la mayor parte de una hora con esto, y la única forma de suprimir los avisos y advertencias generados por las funciones 'imap_ *' está en la respuesta de @ Ragnar. Los desarrolladores de PHP han hecho algunas cosas verdaderamente horribles con IMAP, lo que la convierte en la peor biblioteca con la que he tenido que lidiar. – Sammitch

Cuestiones relacionadas