Deshabilitar los estándares estrictos en PHP 5.4

95

Actualmente estoy ejecutando un sitio en php 5.4, antes de esto, estaba ejecutando mi sitio en 5.3.8. Desafortunadamente, php 5.4 combina E_ALLy E_STRICT, lo que significa que mi configuración anterior para error_reportingno funciona ahora. Mi valor anterior era E_ALL & ~E_NOTICE & ~E_STRICT¿Debería habilitar los valores uno a la vez?

Tengo demasiados errores y los archivos contienen demasiado código para que pueda corregirlos.

icomrade
fuente
11
Consejo ... Arregle el código o los errores mejorarán y serán más difíciles de depurar
Baba
7
s / Desafortunadamente / Afortunadamente
NikiC
96
Gracias por el consejo, sin embargo, no tengo los conocimientos necesarios para volver a escribir todo el complemento jfusion phpbb3. gracias por ser condescendiente.
icomrade
12
Estoy de acuerdo con nuestros amigos en que debes intentar arreglar los errores, pueden venir y morderte el tobillo, además de ocultar todos los errores que dificultan la depuración. Pero tampoco creo que sea justo juzgar el cartel por esta pregunta solitaria, si nunca tuviste que escribir un trabajo espantoso porque tu cliente está en el teléfono molestando a tus hijos por nacer con el que no has trabajado con TI durante mucho tiempo
Jonathan dos Santos
7
Esta es una pregunta perfectamente razonable, y sí, @icomrade, tienes razón sobre la condescendencia y el sarcasmo aquí. Es uno de los rasgos menos atractivos de StackOverflow. Dicho todo esto, le recomiendo que aborde al menos algunas de las advertencias que está recibiendo, incluso si no puede hacerlas todas.
halfer

Respuestas:

139

Como los comentaristas han declarado, la mejor opción es corregir los errores, pero con tiempo o conocimiento limitado, eso no siempre es posible. En su cambio php.ini

error_reporting = E_ALL

a

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Si no tiene acceso a php.ini, potencialmente puede poner esto en su archivo .htaccess:

php_value error_reporting 30711

Este es el valor E_ALL (32767) y la eliminación de los valores E_STRICT (2048) y E_NOTICE (8).

Si no tiene acceso al archivo .htaccess o no está habilitado, probablemente deberá colocarlo en la parte superior de la sección PHP de cualquier script que se cargue desde una llamada del navegador:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Uno de ellos debería ayudarlo a poder utilizar el software. Sin embargo, los avisos y las cosas estrictas son indicadores de problemas o problemas potenciales y puede encontrar que parte del código no funciona correctamente en PHP 5.4.

David Stockton
fuente
11
Estoy usando php 5.4.5 e intenté todo lo anterior pero no pude deshabilitar las notificaciones estrictas :( ¿alguna otra idea?
ro ko
2
Puede intentar poner & ~ E_DEPRECATED junto con las otras partes en error_reporting (). ¿Qué mensajes estás viendo?
David Stockton
4
@roko ¿Es posible que su código esté anulando esto en alguna parte? Seguía viendo errores estrictos después de deshabilitarlo en php.ini, luego me di cuenta de que era solo para algunos sitios web, los que usan Drupal, donde el valor se establece en el código
andrewtweber
1
@AndrewSpear Eso es extraño. En teoría, la configuración de error_reporting debería afectar los errores que se muestran en cualquier lugar donde se muestren. La configuración display_errors debería afectar si obtiene o no los errores en la salida (en las páginas PHP) y error_log afectaría dónde se escriben los errores en el registro. Si display_errors está activado, debería ver los mismos errores en la pantalla que en el registro.
David Stockton
4
+1 por responder una pregunta simple con una respuesta simple sin convertirse en un StackOverflow Smuglord ™.
Joshua Pech
2

.htaccess php_value solo funciona si usa PHP Server API como módulo del servidor web Apache. Utilice la sintaxis de IfModule:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

Si usa PHP Server API CGI / FastCGI use

ini_set('error_reporting', 30711);

o

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

en su código PHP o archivos de configuración PHP .user.ini | modificación de php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

en su host virtual, nivel de servidor.

Taras
fuente
1

Funcionó para mí, cuando configuré error_reporting en dos lugares al mismo tiempo

en algún lugar del código PHP

ini_set('error_reporting', 30711);


y en el archivo .htaccess

php_value error_reporting 30711
Guzik
fuente
Lo único que funcionó para mí sin tener acceso a php.ini, otro de los anteriores no funcionaría por sí solo, solo devolvió un error 500. Ambos juntos bebe !!!
Jamie Hutber
1

Si también necesita deshabilitar E_DEPRACATED, use:

php_value error_reporting 22527

En mi caso, CMS Made Simple se quejaba de que "E_STRICT está habilitado en el error_reporting" así como "E_DEPRECATED está habilitado". Agregar esa línea a .htaccess resolvió ambos errores de configuración.

ingeniero ux
fuente
0

Atención, es posible que deba reiniciar LAMP, Apache o lo que esté usando para que esto surta efecto. Nos atormentamos los sesos durante un tiempo en este caso, pero no pareció afectar hasta que se reiniciaron los servicios, presumiblemente porque el sitio web estaba almacenando en caché.

Luna
fuente
No Es porque Apache necesita volver a cargar la configuración de PHP. Esto se hace AFAIK solo cuando se inicia el servicio.
svin83