8722 sujets

Développement web côté serveur, CMS

Bonjour,

Voilà je n'arrive pas à comprendre à quoi correspond le error_reporting avec la valeur 22527 (venant du phpinfo()).

A la base, je voulais un error_reporting avec comme valeur E_ALL & ~E_NOTICE & ~E_DEPRECATED

Donc ma question est : Comment fonctionne le error_reporting avec une constante comme 22527?

Et comment savoir ce que cela fait ?

Merci d'avance pour vos réponses. Smiley cligne
Administrateur
Bonjour,

c'est un masque binaire :
exemple 2 et 128 et 2048, que des puissances de 2, ça fait 2178 mais en binaire ça fait 1000 1000 0010 (tout à droite c'est le 1 puis de droite à gauche le 2, le 4, le 8, etc)
Windows a une calculatrice pour ça (en tout cas Win 7, il faut lancer "calc" et dans le menu affichage passer en mode Programmeur).

Si je convertis 22527, ça fait :
101 0111 1111 1111
soit (de droite à gauche !) 1 et 2 et 4 et 8
16 et 32 et 64 et 128
256 et 512 et 1024 (PAS 2048)
4096 et 16384 (PAS 8192)
Ensuite faut aller perdre 10 minutes dans http://php.net/manual/fr/errorfunc.constants.php
Bonneuh chanceuh Smiley langue
Smiley lol
Ah punaise MERCI MERCI felipe !

Punaise on comprenais pas d'où venait ce chiffre !

Pas évident de savoir qu'il fallait le convertir en binaire pour ensuite comprendre les différents codes.

Merci encore !
Euh du coup juste pour confirmer, le code de E_ALL correspond à 32767

Donc cela veut dire que pour 22527, E_ALL n'est pas inclus, ce qui correspondrait à ~E_ALL, on est bien d'accord ?
Administrateur
J'ai oublié depuis le temps comment fonctionnait E_STRICT (y a eu du changement vers 5.3 ou 5.4) mais sinon mis à part cette valeur-là, E_ALL c'est "tout à 1" et ça donne un exposant de 2 auquel on enlève 1.
Exemple :
1111 en binaire, c'est en décimal 1+2+4+8 = 16-1 = 15
(binaire) 10000 = (décimal) 2^5 = 16
==> or (10000 - 1) ça fait 01111
Magique Smiley ravi

Donc E_ALL c'est forcément une valeur genre 2048 - 1 ou 32768-1 ou … selon la version (je me fie à http://php.net/manual/fr/errorfunc.constants.php#errorfunc.constants.errorlevels.e-all )
1+2+4+(…)+1024 = 1024 * 2 - 1 = 2048 - 1 = 2047 (en binaire euh plein de 1, aucun 0)

EDIT : le plus sûr si tu as des doutes (et ce genre de doute-là c'est bien), c'est de fixer la valeur d'error reporting que tu veux. Pas de (mauvaise) surprise comme ça.
Modifié par Felipe (10 Feb 2015 - 13:51)