¿Cómo desactivo los avisos PHP?

126
Notice: Constant DIR_FS_CATALOG already defined

Ya he comentado display_errorsen php.ini, pero no está funcionando.

¿Cómo hago para que PHP no envíe tales cosas a los navegadores?

ACTUALIZAR

Puse display_errors = Offallí, pero todavía está informando tales avisos,

¿Es este un problema con PHP 5.3?

Reportando numerosas Pila de Llamadas también ...

usuario198729
fuente
3
Si está utilizando Apache, ¡es posible que deba reiniciar su servidor! Si está utilizando XAMPP, simplemente seleccione "reiniciar" en la aplicación del administrador.
st4wik
2
Sugiero correr grep display_errors /path/to/php.inipara ver si su línea se anula en algún lugar del archivo. Esto es lo que me estaba pasando.
usandfriends
Error_reporting es la solución
David Stienen
intente ini_set('display_errors',0)en su archivo php. Cuando su configuración inicial no funciona, debe verificar si phpinfo()muestra el valor deseado. Si no, o cambió el archivo ini incorrecto o algo sobrescribe sus valores de php.ini
Radon8472
No es un error de PHP 5.3. display_errors funciona desde php 4.0.3 hasta las últimas versiones @see 3v4l.org/87gIl
Radon8472

Respuestas:

78

Se puede establecer display_errorsque 0o utilizar la error_reporting()función.

Sin embargo, los avisos son molestos (puedo simpatizar en parte ) pero tienen un propósito. ¡No deberías definir una constante dos veces, la segunda vez no funcionará y la constante permanecerá sin cambios!

Pekka
fuente
44
+1: apruebo mencionar que debe corregir los errores, no apagar los informes. Y lo hiciste de una manera más amable que @ Jonathan Kuhn :-)
Josh
1
No, parece que este es un error de php5.3, display_errorsno funciona como se esperaba.
user198729
@user intente a phpinfo()para ver si la configuración se aplica realmente. Perdóname, pero dudo mucho que hayas encontrado un error en PHP 5.3 - Solo lo creeré cuando lo vea :)
Pekka
Extraño, local valueestá encendido, pero master valueestá apagado, no sé qué significa eso exactamente ...
user198729
1
@user Creo que el valor local puede provenir de ini_setdirectivas o php_ini_flagconfiguraciones en .htaccessarchivos.
Pekka
242

De la documentación de PHP ( error_reporting ):

<?php
// Turn off all error reporting
error_reporting(0);
?>

Otras opciones interesantes para esa función:

<?php

// 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);
// For PHP < 5.3 use: 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);

?>
Cristian
fuente
Muy útil y da la respuesta a la pregunta. Aunque sé que es mejor arreglar todos los avisos también. A veces puede ser útil mostrar todo menos avisos.
Timo002
3
Desactivar solo los avisos no funcionó para mí usando ^ AVISO como se indica en la publicación anterior. Para PHP v5.3 use: E_ALL & ~ E_NOTICE
Chizzle
Si tiene una API REST que devuelve JSON o XML o lo que sea, es posible que desee desactivarlos. O al menos conviértalos en excepciones y trátelos en consecuencia.
TheRealChx101
Hola. Trabajó para mi. Muchas gracias.
H. Farid
Display_errors controla si se envían errores a stdoutput. Pero cuando cambia error_reporting a 0, deshabilita totalmente todo el manejo de errores y el registro de errores. NUNCA debe hacer error_reporting (0).
Radon8472
30

Para la línea de comando php, establezca

error_reporting = E_ALL & ~E_NOTICE

en /etc/php5/cli/php.ini

La phpejecución del comando omite los avisos.

Paul Salber
fuente
Al hacer esto error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING en php.ini. Deshabilita el Aviso PHP y las Advertencias PHP. Para que no se vean avisos y advertencias de php en los navegadores
Deepak Lamichhane
Esto va para la configuración de la consola php. Si está utilizando php para generar páginas web sobre apache2, el archivo de configuración del servidor web es /etc/php5/apache2/php.ini. Es mejor usar phpinfo () para ver qué archivo de configuración se usa realmente.
MilanG
23
<?php

// 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
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);

?>

fuente http://php.net/manual/en/function.error-reporting.php

Abhishek Goel
fuente
2
¿No es solo un duplicado de esta respuesta existente publicada hace años?
Pang
Ambos tenemos una copia pegada de la documentación de PHP y ambas respuestas han mencionado los recursos.
Abhishek Goel
@AbhishekGoel Los unicornios son ponis disfrazados, esa afirmación es irrelevante, aún duplicaste la respuesta ya existente cuatro años después.
Ricky Boyce
@RickyB No verifiqué la respuesta existente y tampoco la copié.
Abhishek Goel
12

Usó esta línea en su código

error_reporting(E_ALL ^ E_NOTICE);  

Creo que es helf lleno para ti.

vicky mahale
fuente
6

Estás buscando:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
Christian Tismer
fuente
2
Hola @Christian, y bienvenido a StackOverflow. En el futuro, sería genial si pudiera agregar una pequeña explicación / detalle adicional a su respuesta para aclarar a aquellos que lo ven por qué / cómo funciona la solución / soluciona el problema. Muchas gracias y feliz codificación :)
Zachary Kniebel
1
¡exactamente! Yo uso /usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.phppara mi crontab
vladkras
4

Prefiero no configurar el error_reportinginterior de mi código. Pero en un caso, un producto heredado, hay tantos avisos que deben ocultarse.

Así que utilicé el siguiente fragmento para establecer el valor configurado del lado del servidor error_reportingpero restar el E_NOTICEs.

error_reporting(error_reporting() & ~E_NOTICE);

Ahora la configuración de informe de errores se puede configurar en php.inio .htaccess. Solo los avisos siempre estarán deshabilitados.

algoritmo
fuente
3

Puede configurar ini_set('display_errors',0);su secuencia de comandos o definir con qué errores desea mostrar error_reporting().

jeroen
fuente
Necesitaba usar el ini_setmétodo mencionado aquí, el error_reporting(0)método mencionado en otra parte no tuvo ningún efecto.
pix
2

al no causar los errores:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

Si realmente tiene que hacerlo, cambie el informe de errores usando error_reporting () a E_ALL ^ ​​E_NOTICE.

Jonathan Kuhn
fuente
1
Si se trata de un sitio de producción, si crees que está libre de errores o no, aún no debes mostrar los errores si surgen, por lo que "al no causar los errores" parece una respuesta un tanto descarada a una pregunta válida.
Cam
55
¿desde cuándo está bien permitir errores en un sitio de producción? Estoy de acuerdo en que en un sitio de producción no debe mostrar errores, eso no es lo que estaba diciendo. Estaba diciendo que debe verificar si la constante está definida y establecerla si no (por eso le di el ejemplo de código).
Jonathan Kuhn
Aunque su respuesta no fue la "más agradable", parece responder a la pregunta del OP al máximo. +1 a su respuesta y / deseo que se marcó como respuesta, ya que es la respuesta correcta.
Nazca
@Nazca Sí, desde entonces he cambiado mi comportamiento y trato de ser mucho más amigable. :)
Jonathan Kuhn
2

Para el código PHP:

<?php
error_reporting(E_ALL & ~E_NOTICE);

Para php.iniconfig:

error_reporting = E_ALL & ~E_NOTICE
Nabi KAZ
fuente
1

Encontré este truco recientemente. Golpee una @ al comienzo de una línea que puede producir una advertencia / error.

Como por arte de magia, desaparecen.

DrLazer
fuente
21
Esa es una mala idea por lo general, es como ponerse tapones para los oídos porque su automóvil está haciendo un ruido horrible.
David Morrow
10
En realidad, esto tiene mucho sentido para algunos casos, por ejemplo, al representar una variable sin importar si está configurada o vacía.
Frans
1
Esto solo tiene sentido cuando tienes algo como un complemento de WordPress que el autor aún no ha actualizado y sabes exactamente qué está causando el problema. Sin embargo, es una tirita, no una solución.
Imperativo
Me gustan tanto el error_reporting () como '@'. No estaba al tanto de ninguno de estos. Gracias. Me gusta la '@' ya que proporciona la misma funcionalidad de error_reporting (0) y es más fácil de escribir. Si el problema se parece más a "la percha que sostiene el escape" que al "horrible ruido de la molienda", entonces permite que el proyecto avance. Puedo encontrarlos y solucionarlos fácilmente cuando hay tiempo. Esto ayudó con un problema en el que el error es causado por los datos leídos de un archivo, por lo que no hay errores tipográficos o problemas con la biblioteca.
Mark Longmire
1
Solo asegúrate de poner @ donde estás 100% seguro de lo que estás haciendo.
Nick
1

Use phpinfo () y busque para Configuration File (php.ini) Pathver qué ruta de archivo de configuración se usa para php. PHP puede tener múltiples archivos de configuración dependiendo del entorno que esté ejecutando. Por lo general, para la consola es:

/etc/php5/cli/php.ini

y para php ejecutado por apache es:

/etc/php5/apache2/php.ini

Y luego establece error_reportingla forma en que lo necesitas:

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini- expediente

MilanG
fuente
1

Como mencionan algunos y si usted es el autor del código, debe corregir todos esos errores, avisos, etc., ya que le causará más problemas a largo plazo que no solucionarlos (especialmente cuando actualiza su sistema operativo). Para su servidor, debe tener errores que se muestran solo en sus registros, no en la pantalla del cliente.

Entonces, para evitar los errores en su navegador, use la display_errorsbandera como ya encontró:

display_errors = Off

Ahora el verdadero problema es cuando estás ejecutando el código de otra persona. En ese caso, es probable que la modificación del código se sobrescriba cada vez que actualice ese código. Resulta tedioso mantener ese código.

En mi caso, estoy ejecutando PHP crontabpara que el wp-cron.phpscript se ejecute de vez en cuando. Recibía errores en mis correos electrónicos, lo que se vuelve tedioso cuando recibes un correo electrónico cada 10 minutos. Sin embargo, en ese caso, el sistema Wordpress tiene un archivo de configuración que incluye WP_DEBUGay llaman a la error_reporting()función, por lo que intentar cambiar la error_reportingvariable en la línea de comando no funcionará. En su lugar, debe editar el wp-config.phparchivo en la carpeta raíz y asegurarse de que WP_DEBUGesté configurado en false. De lo contrario, recibirá todas esas advertencias y avisos todo el tiempo.

Alexis Wilke
fuente
0

Puede verificar si la constante ya está definida usando:

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>
Thiago Belem
fuente
0

Creo que comentar display_errors en php.ini no funcionará porque el valor predeterminado es On. Debe configurarlo en 'Off' en su lugar.

No olvide reiniciar Apache para aplicar los cambios de configuración.

También tenga en cuenta que si bien puede configurar display_errors en tiempo de ejecución, cambiarlo aquí no afecta a los errores FATAL.

Como han señalado otros, lo ideal es que durante el desarrollo se ejecute con error_reporting al nivel más alto posible y display_errors habilitado. Si bien es molesto cuando comienza, estos errores, advertencias, avisos y consejos estrictos de codificación se suman y le permiten convertirse en un mejor codificador.

AllenJB
fuente
0

Constantes dobles definidas

Para corregir el error específico aquí, puede verificar si una constante ya está definida antes de definirla:

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

Yo personalmente comenzaría con una búsqueda en la base de código para la constante DIR_FS_CATALOG, luego reemplazaría la doble definición con esto.

Ocultar avisos PHP en línea, caso por caso

PHP proporciona el @operador de control de errores, que puede usar para ignorar funciones específicas que causan avisos o advertencias.

Al usar esto, puede ignorar / deshabilitar avisos y advertencias caso por caso en su código, lo que puede ser útil para situaciones en las que un error o aviso es intencional, planificado o simplemente molesto y no es posible resolverlo en la fuente . Coloque un @antes de la función o var que está causando un aviso y se ignorará.

Aquí hay un ejemplo:

// Intentional file error
$missing_file = @file( 'non_existent_file' );

Puede encontrar más información sobre esto en los documentos de Operadores de control de errores de PHP .

Kevin Leary
fuente