Désactivation des standards stricts dans PHP 5.4

95

J'exécute actuellement un site sur php 5.4, avant cela, j'utilisais mon site sur 5.3.8. Malheureusement, php 5.4 combine E_ALLet E_STRICT, ce qui signifie que mon précédent paramètre pour error_reportingne fonctionne pas maintenant. Ma valeur précédente était E_ALL & ~E_NOTICE & ~E_STRICTDois-je uniquement activer les valeurs une par une?

J'ai beaucoup trop d'erreurs et les fichiers contiennent trop de code à corriger.

icomrade
la source
11
Conseil ... Corrigez le code ou les bogues deviendraient meilleurs et plus difficiles à déboguer
Baba
7
s / Malheureusement / Heureusement
NikiC
96
Merci pour les conseils, mais je n'ai pas les connaissances nécessaires pour réécrire l'intégralité du plugin jfusion phpbb3. merci d'être condescendant.
icomrade
12
Je conviens avec nos amis que vous devriez essayer de corriger les erreurs, ils pourraient venir vous mordre la cheville, cachant également toutes les erreurs, ce qui rend le débogage difficile. Mais je ne pense pas non plus qu'il soit juste de juger l'affiche pour cette question solitaire, si vous n'avez jamais eu à écrire un travail hideux parce que votre client est au téléphone en train de harceler vos enfants à naître, vous n'avez pas travaillé avec IT depuis assez longtemps
Jonathan dos Santos
7
C'est une question parfaitement raisonnable, et oui @icomrade - vous avez raison sur la condescendance et le sarcasme ici. C'est l'un des traits les moins attrayants de StackOverflow. Cela dit, je vous recommande de vous attaquer au moins à certains des avertissements que vous recevez - même si vous ne pouvez pas tous les faire.
halfer le

Réponses:

139

Comme les commentateurs l'ont indiqué, la meilleure option est de corriger les erreurs, mais avec un temps ou des connaissances limités, ce n'est pas toujours possible. Dans votre changement de php.ini

error_reporting = E_ALL

à

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Si vous n'avez pas accès au php.ini, vous pouvez potentiellement le mettre dans votre fichier .htaccess:

php_value error_reporting 30711

Il s'agit de la valeur E_ALL (32767) et de la suppression des valeurs E_STRICT (2048) et E_NOTICE (8).

Si vous n'avez pas accès au fichier .htaccess ou s'il n'est pas activé, vous devrez probablement le mettre en haut de la section PHP de tout script chargé à partir d'un appel de navigateur:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

L'un de ceux-ci devrait vous aider à utiliser le logiciel. Les avis et les informations strictes sont cependant des indicateurs de problèmes ou de problèmes potentiels et vous constaterez peut-être qu'une partie du code ne fonctionne pas correctement dans PHP 5.4.

David Stockton
la source
11
J'utilise php 5.4.5 et j'ai essayé tout ce qui précède mais je n'ai pas pu désactiver les notifications strictes: (d'autres idées?
ro ko
2
Vous pouvez essayer de mettre & ~ E_DEPRECATED avec les autres parties dans error_reporting (). Quels messages voyez-vous?
David Stockton
4
@roko Est-il possible que votre code remplace cela quelque part? Je voyais toujours des erreurs strictes après l'avoir désactivé dans php.ini, puis j'ai réalisé que c'était uniquement pour certains sites Web, ceux utilisant Drupal, où la valeur était définie dans le code
andrewtweber
1
@AndrewSpear C'est étrange. En théorie, le paramètre error_reporting devrait affecter les erreurs qui sont affichées partout où elles sont affichées. Le paramètre display_errors devrait affecter si vous obtenez ou non les erreurs dans la sortie (dans les pages PHP) et le error_log affecterait où les erreurs sont écrites dans le journal. Si display_errors est activé, vous devriez voir les mêmes erreurs à l'écran que dans le journal.
David Stockton
4
+1 pour répondre à une question simple avec une réponse simple sans se transformer en un StackOverflow Smuglord ™.
Joshua Pech
2

.htaccess php_value ne fonctionne que si vous utilisez l'API du serveur PHP comme module du serveur Web Apache. Utilisez la syntaxe IfModule:

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

Si vous utilisez PHP Server API CGI / FastCGI, utilisez

ini_set('error_reporting', 30711);

ou

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

dans votre code PHP ou dans les fichiers de configuration PHP .user.ini | Modification de php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

sur votre hôte virtuel, au niveau du serveur.

Taras
la source
1

Cela a fonctionné pour moi, lorsque j'ai défini error_reporting à deux endroits en même temps

quelque part dans le code PHP

ini_set('error_reporting', 30711);


et dans le fichier .htaccess

php_value error_reporting 30711
Guzik
la source
La seule chose qui a fonctionné pour moi sans avoir accès à php.ini, un autre des éléments ci-dessus ne fonctionnerait pas par lui-même, n'a renvoyé qu'une erreur 500. Les deux ensemble bébé !!!
Jamie Hutber
1

Si vous devez également désactiver E_DEPRACATED, utilisez:

php_value error_reporting 22527

Dans mon cas, CMS Made Simple se plaignait "E_STRICT est activé dans le rapport d'erreur" ainsi que "E_DEPRECATED est activé". L'ajout de cette ligne à .htaccess a résolu les deux erreurs de configuration.

ux.engineer
la source
0

Attention, vous devrez peut-être redémarrer LAMP, Apache ou tout ce que vous utilisez pour que cela prenne effet. Nous avons creusé la tête pendant un certain temps sur celui-ci, cela ne semblait avoir aucun effet jusqu'au redémarrage des services, probablement parce que le site Web était en cache.

Lune
la source
Nan. C'est parce qu'Apache a besoin de recharger les paramètres de PHP. Ceci est AFAIK uniquement lorsque le service démarre.
svin83