PHP 5 desactiva el error de estándares estrictos

175

Necesito configurar mi script PHP en la parte superior para deshabilitar los informes de errores para estándares estrictos.

¿Alguien puede ayudar?

Manny Calavera
fuente
8
@ 451F: Creo que las palabras clave aquí son "estándares estrictos". No sé sobre versiones anteriores, pero con PHP 5.4.0 se recomienda que configure el informe de errores E_ALL & ~E_DEPRECATED & ~E_STRICTpara producción. Tenga en cuenta que sugieren que deshabilite estándares estrictos.
Fake Code Monkey Rashid
También ubique su archivo php.ini y cópielo a / usr / local / php5 / lib /
yadhu

Respuestas:

185

¿Desea deshabilitar los informes de errores o simplemente evitar que el usuario los vea? Por lo general, es una buena idea registrar errores, incluso en un sitio de producción.

# in your PHP code:
ini_set('display_errors', '0');     # don't show any errors...
error_reporting(E_ALL | E_STRICT);  # ...but do log them

Se registrarán en su registro estándar del sistema, o usarán la error_logdirectiva para especificar exactamente dónde desea que vayan los errores.

Nate
fuente
11
Solo para decir explícitamente lo obvio: por supuesto, también puede configurarlos en su php.iniarchivo, por ejemplo, si no puede modificar el código PHP.
sschuberth
1
Sin embargo, registrar errores estrictos en la producción también es una mala práctica. Como llenará sus registros con avisos que probablemente no importen, causando uno o ambos de los siguientes problemas: serverAdmin perderá / ignorará errores y el directorio de registro consumirá todo el espacio del servidor en algún momento.
Lance
44
Esto no funciona para mí: tuve que usar E_ALL y ~ E_STRICT del comentario de Fake Code Monkey Rashid de la respuesta a continuación
2015
1
¿Cómo funciona esto junto con lo siguiente que encontré en mi php.ini log_errors = On Vs ini_set ('display_errors', '0'); ¿Es el último set el que gana?
aterrizó el
@nate cuando publiques algún código, dinos dónde podemos pegarlo. No sé dónde ponerlo: en php.inio .htaccessen algún lugar de mi código PHP.
Даниил Пронин
89

Para no errores.

error_reporting(0);

o simplemente no es estricto

error_reporting(E_ALL ^ E_STRICT);

y si alguna vez quieres volver a mostrar todos los errores, usa

error_reporting(-1);

Tyler Carter
fuente
56
+1: Creo que ^solo es bueno para omitir un tipo de error. Si desea desactivar tipos adicionales, debe usar el E_ALL & ~E_DEPRECATED & ~E_STRICTformato. O tal vez el (E_ALL & ~(E_DEPRECATED | E_STRICT))formato.
Fake Code Monkey Rashid
10
Nota: E_STRICT solo ha sido parte de E_ALL desde php 5.4
Fred Haslam el
@FakeCodeMonkeyRashid Me pregunto por qué es eso. probablemente porque entonces el orden de evacuación es importante?
codeling
Suprimir informes de errores STRICT en PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Suprimir informes de errores STRICT en PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
Mel_T
¡Quiero señalar que usar ^("xor") en lugar de & ~("and not") es una mala idea ! ^depende de la suposición de que, por ejemplo, E_STRICT es parte de E_ALL y siempre lo será. Esto es malo porque E_ALL cambió en el pasado (E_STRICT no era pasado de eso, pero ahora es desde PHP 5.4). Si la suposición falla un día, ^no solo se romperá, sino que hará lo contrario de lo que se supone que debe hacer: habilitará E_STRICT debido a cómo funciona XOR ( ^). & ~sin embargo, siempre deshabilitará E_STRICT, sin importar el valor actual de E_ALL. Por & ~lo tanto, debe ser utilizado.
Jay
31

Todas las soluciones anteriores son correctas. Pero, cuando hablamos de una aplicación PHP normal, tienen que incluirse en cada página que requiera. Una forma de resolver esto es a través .htaccessde la carpeta raíz. Solo para ocultar los errores. [Ponga una de las siguientes líneas en el archivo]

php_flag display_errors off

O

php_value display_errors 0

A continuación, para configurar el informe de errores.

php_value error_reporting 30719

Si se pregunta cómo 30719surgió el valor , E_ALL (32767), E_STRICT (2048) son realmente constantes y tienen un valor numérico y ( 32767 - 2048 = 30719)

Starx
fuente
2
Muchas gracias, esto hizo el truco (solución .htaccess) en PHP 5.4.7, nada más, incluso modificar el .ini, estaba haciendo el truco.
Solía php_admin_value error_reportingque esto funcionara (en la configuración de vhost).
Lou Terrailloune
@Seza, correcto Corregido.
Starx
1
no se trata de la página, se prefiere este método porque la mayoría de los errores E_STRICT son en tiempo de compilación y no se pueden anular en tiempo de ejecución
AbiusX
2
Hola, para que sea más fácil, para aquellos que usan wamp, puede deshabilitar los errores haciendo clic en php> configuración de php >> mostrar errores. Si está marcado, desactívelo.
Hemang Rami
9

El valor predeterminado del indicador error_reporting es E_ALL & ~ E_NOTICE si no está configurado en php.ini. Pero en algunas instalaciones (particularmente las instalaciones destinadas a entornos de desarrollo) tiene E_ALL | E_STRICT establecido como valor de este indicador (este es el valor recomendado durante el desarrollo ). En algunos casos, especialmente cuando desee ejecutar algunos proyectos de código abierto, que se desarrolló antes de la era de PHP 5.3 y aún no está actualizado con las mejores prácticas definidas por PHP 5.3, en su entorno de desarrollo, probablemente se encontrará con algunos mensajes como los que estás recibiendo. La mejor manera de hacer frente a esta situación es establecer solo E_ALL como el valor del indicador de informe de error , ya sea enphp.ini o en código (probablemente en un controlador frontal como index.php en web-root de la siguiente manera:

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}
MN Islam Shihan
fuente
8

En el conjunto php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
MSS
fuente
4

WordPress

Si trabaja en el entorno de wordpress, Wordpress establece el nivel de error en el archivo wp-includes / load.php en función wp_debug_mode(). Entonces, debe cambiar el nivel DESPUÉS de que se haya llamado a esta función (en un archivo no registrado en git, por lo que solo es desarrollo), o bien modificar directamente la error_reporting()llamada

Nicola Peluchetti
fuente
Esto es realmente útil, tenía el modo de depuración activado para una instalación de Wordpress y no me di cuenta de que lo hizo. ¡Gracias por la información!
Tim
2

No vi una respuesta limpia y adecuada para el software listo para producción, así que aquí va:

/*
 * Get current error_reporting value,
 * so that we don't lose preferences set in php.ini and .htaccess
 * and accidently reenable message types disabled in those.
 *
 * If you want to disable e.g. E_STRICT on a global level,
 * use php.ini (or .htaccess for folder-level)
 */
$old_error_reporting = error_reporting();

/*
 * Disable E_STRICT on top of current error_reporting.
 *
 * Note: do NOT use ^ for disabling error message types,
 * as ^ will re-ENABLE the message type if it happens to be disabled already!
 */
error_reporting($old_error_reporting & ~E_STRICT);


// code that should not emit E_STRICT messages goes here


/*
 * Optional, depending on if/what code comes after.
 * Restore old settings.
 */
error_reporting($old_error_reporting);
Arrendajo
fuente