2009-10-29 21 views
49

Recibo avisos y advertencias y me gustaría desactivarlos en mi archivo php. errores son:Desactivar advertencias y errores en php/mysql

Warning: fsockopen() 

y las comunicaciones son:

Notice: A non well formed numeric value encountered in 

Estoy planeando usar cron para este script php y no quiero tener ningún error o avisos registrados en cualquier lugar.

+4

Si no desea que el cron le envíe un mensaje de correo electrónico, puede apuntar su salida a '/ dev/null'. Aún así, los errores generalmente están ahí por una razón: ¡supuestamente le gustaría saber cuándo se rompe su script cron! Intenta manejar los errores con gracia. – ceejayoz

+0

En algún lugar relacionado: http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

Respuesta

137

Cuando esté seguro de que su guión es perfecta eficacia, usted puede deshacerse de la advertencia y las comunicaciones como esto: ésta línea al principio de su script php:

error_reporting(E_ERROR); 

Antes de eso, cuando se trabaja en su secuencia de comandos, le aconsejaría que depure correctamente su secuencia de comandos para que todos los avisos o advertencias desaparezcan uno por uno. lo que debe establecer primero que incluya tanta información como sea posible con:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

ACTUALIZACIÓN: cómo registrar errores en lugar de mostrarlos Como se sugiere en los comentarios, la mejor solución es registrar los errores en un archivo de modo que sólo el el desarrollador de php ve los mensajes de error, no los usuarios. Una posible implementación es a través del archivo .htaccess, útil si no tiene acceso al archivo php.ini (source).

# supress php errors 
php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
php_value docref_root 0 
php_value docref_ext 0 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

No hagas esto. Suprimir todos los errores es una idea horrible. – ceejayoz

+31

estás hablando como si recitaras un mantra. En este caso de uso específico, eso es exactamente lo que quiere el usuario. Si él hubiera pedido un sistema de registro, lo pediría. – pixeline

+4

Estoy de acuerdo tanto con ceejayoz como con pixeline. Sin embargo, error_reporting (0) solo debe establecerse como una medida de seguridad en los entornos de producción, de modo que la información crítica no se filtre por error a los usuarios malintencionados. El uso de error_reporting (0) para "ignorar errores" conlleva un alto riesgo de generar problemas. Sé que es lo que pidió el autor, pero sugeriría que no lo haga. –

2

se puede establecer el tipo de informe de errores que necesita en php.ini o mediante el uso de la función() error_reporting en la parte superior de su script.

18

Anteponga las funciones con el símbolo '@' para suprimir ciertos errores, en lugar de desactivar TODOS los informes de errores.

Más información: http://php.net/manual/en/language.operators.errorcontrol.php

PHP soporta un operador de control de errores: la arroba (@). Cuando se antepone a una expresión en PHP, cualquier mensaje de error que pueda ser generado por esa expresión será ignorado.

@fsockopen();

+0

esto es generalmente una mejor solución para el código en producción, IMHO – billrichards

+1

Tal vez, "* quizás *", para una función, sin embargo, llenar sus scripts con esto es más tarde cuando * algo * no funciona y su registro de errores esta vacio. La mejor manera es configurar un caso/interruptor para permitir encender y apagar la "visualización" de errores muy rápidamente. Luego, en vivo, están apagados, el dev/test puede estar encendido. De cualquier manera, el registro en el archivo de registro de errores siempre (casi) se aconseja – James

14

Mostrar siempre los errores de servidor de prueba. Nunca muestre errores en el servidor de producción.

Escriba una secuencia de comandos para determinar si la página está en un servidor local, de prueba o en vivo y establezca $ state en "local", "prueba" o "en vivo". Entonces:

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

Si no puede llegar a su archivo php.ini, por alguna razón, desactivar errores en la salida estándar (display_errors) en una.htaccess en cualquier directorio agregando la siguiente línea:

php_flag display_errors off

Además, se puede añadir el registro de errores en un archivo:

php_flag log_errors on

13

PHP referencia error_reporting:

// Turn off all error reporting 
error_reporting(0); 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
// This is the default value set in php.ini 
error_reporting(E_ALL^E_NOTICE); 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 
+0

, los informes de error se desactivarán pero sus informes se almacenarán en un archivo de registro en la carpeta. ¿Cómo detener a php para crear archivos de registro? tnx –

+0

@MehdiJ: para detener PHP de errores de registro en ** error_log ** agregue este código 'ini_set ('log_errors', 'off');' –

Cuestiones relacionadas