php : Codez propre sous register_globals = Off et error_reporting = e_all
Vous venez de mettre easyphp1.7 a la place de easyphp1.6 ? ou vous avez une config spéciale sécurisante sur le server vous hébergeant?
tous ces problemes viennent de la nouvelle mode de configurer par défaut php.ini avec :
register_globals = Off
error_reporting = e_all
je cite le message d'alerte que vous avez certainement zappé en installant easyphp1.7 :
EasyPHP 1.7 :
Configuration PHP
§ register_globals = Off [sécurité, performance]
Depuis la version 4.2.0 de PHP, la valeur par défaut de register_global est à Off dans le php.ini. Dorénavant une variable envoyée par un formulaire (méthode&nbs
p;POST) n'est plus récupérée avec $variable mais avec $_POST["variable"]. Toutes les variables globales sont concernées (POST, GET, cookies, environnement et autres variables serveur :&
nbsp;$_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_REQUEST, $_SESSION). Ceci peut nécessiter la réécriture partielle de certains scripts.
Rq : il est vivement conseillé d’utiliser cette configuration qui est celle adoptée par défaut depuis PHP 4.2.0 et de coder vos scripts en conséquence. Cependant
si vous souhaitez utiliser d’anciens scripts sans avoir à les réécrire, vous avez toujours la possibilité de remettre dans le fichier php.ini register_global à On.
§ error_reporting = E_ALL [codage propre]
Les erreurs de codage et les avertissements (warning) sont pris en compte. Cette configuration est plus restrictive mais nécessaire pour un codage propre. Il est 
;donc possible que certains scripts génèrent des avertissements qui n'apparaissaient pas auparavant. Dans ce cas, il s'agira essentiellement de notifications. Si ces notifications sont&
nbsp;dues à un codage intentionnel vous pouvez les supprimer en remplaçant dans le fichier php.ini la ligne "error_reporting = E_ALL" par "error_reporting = E_ALL & ~E_NOT
ICE"
Déja pourquoi nous avoir fait ça? on demandait rien nous!!
mais en quelque sorte si... car il été bien notre monde ou php avait une grande patience et acceptait notre façon de coder a la barbare en vérifiant k'un truc sur deux... tant que sa fonctionne...
oui mais voila, les petit malin hackers se plaisaient aussi dans ce monde (/me se cache), monde comme deja dit, on vérifiait pas beaucoup de chose, tant que ça fonctionnait, rulez. Bref un paradis a celui ki voulait vous faire sauter votre site, quelque commande par les variables non vérifiées et le
tour été joué.
Soyez heureux de ces modifications contraigniantes, car les majors du php veillent sur vous, ou plutot vous force a faire quelque chose de propre pour vous sécurisez vous meme.
commençons, par le plus chiant :
error_reporting = E_ALL
avant c'était : error_reporting = E_ALL & ~E_NOTICE.
cette nouvelle config veut dire en clair :
affiche une erreur pour tout truc chelou qui mériterait retouche.
avant c'était plutot :
affiche une erreur que si c'est grave.
donc vous voici avec des dizaines ,et des dizaines de ligne d'erreurs sur vos pages php (gros crado en passant).
Les
notices ne sont pas bloquantes pour le script (mais peuvent causer d'autre bug), il affiche ces notice comme conseil mais ne stop pas l'execution du script.
Donc codez oui, mais codez propre, ainsi vous n'aurez pas d'erreur affichée. na.
ensuite : register_globals = Off
Qu'elle était bien cette config a ON, nous permettant de nous servir directement des variables définies par l'url (method GET) ou venues d'un formulaire (method POST ou GET...) C'EST FINI !!!
avant, avec une var définie dans l'url ainsi :
page.php?mavar=toto
on pouvait direct faire :
<?
echo $mavar;
?>
et la page affichait sans broncher 'toto'
maintenant, non seulement vous zetes obligé de préciser l'origine de la var avec : $_GET['mavar'] (que c'est fastidueux...) et en + (sa c le comble) de vérifier son existance avant de faire quoi que ce soit avec, c'est a dire de faire :
<?
if(isset($_GET['mavar']))echo $_GET['mavar'];
?>
beaucoup moin drole déja...
Notez que les feignant feront :
<?
@echo $_GET['mavar'];
?>
le @ voulant dire :
une erreur? tu sais ou tu peux te la mettre? (déconseillé)
bien sure, partout dans vos scripts vous utilisez des variables que vous ne controler pas toujours l'existance... alors qu'il fodrait.
a la place de
<?
if($untruc)faireuntruc();
?>
mettre
<?
if(isset($untruc))faireuntruc();
?>
etc
by chapodepay________________________
je fais du monde virtuel la vie que j'aurais aimé avoir
http://www.horslimite.net
webmastering & Co :)