JeuWeb - Crée ton jeu par navigateur
register_globals ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : register_globals ? (/showthread.php?tid=5178)

Pages : 1 2 3


register_globals ? - Argorate - 18-01-2011

Bonjour,

je suis actuellement pas chez moi (car je n'ai pas ce pb chez moi), j'ai installé wamp avec la config par défaut, et j'ai fais la constatation suivante:


$TEST = 2;
$_GET['TEST'] = 1;
debug($TEST); //RETOURNE 2

$GLOBALS['TEST'] = 1;
debug($TEST); //RETOURNE 1!!??

J'ai donc regarder dans le php.ini:
Citation :register_globals = Off
register_long_arrays = Off
Normal, puisque c'est supposé être a off par défaut, mais donc là... je ne comprend pas pourquoi ça fais ça!? Y a autre chose que le register_globals ?

merci.


RE: register_globals ? - Sephi-Chan - 18-01-2011

Il me semble que register_global empêche seulement que les clés des superglobals ne génèrent des variables du même nom (avec le gros risque de collision que ça implique).

Je ne comprends même pas pourquoi tu utilises GLOBALS.



Sephi-Chan


RE: register_globals ? - djidi - 18-01-2011

$TEST est définit à l'extérieur d'une fonction donc cela devient logiquement une variable globale et $GLOBALS permet de modifier toutes les globales définies donc rien d'anormal jusque la il me semble.
D'ailleurs, dans le tableau $GLOBALS, ta variables $_GET['TEST'] n'est pas $GLOBALS['TEST'] mais $GLOBALS['_GET']['TEST'].

Comme dit par Sephi-chan, en désactivant "register_globals" tu empêche surtout que lorsque $_GET['bidule'] est définit, une variable $bidule soit créée.


RE: register_globals ? - Argorate - 18-01-2011

Non, mais je n'ai définit nul part $TEST comme étant global. Il n'y a aucune fonction là (si c'est le debug qui te tracasse, tu peut le remplacer par echo en l'occurrence, c'est juste ma fonction que j'utilise mais ça n'a aucun impact sur le sujet en fait^^)

Donc tu prends une variable (sans la déclarer en global, un truc tout simple) et si tu utilises $GLOBALS[de cette variable] cela change le contenu de celle-ci, donc je ne comprend vraiment pas, ça ne le fait pas chez moi et encore heureux! ^^


RE: register_globals ? - djidi - 18-01-2011

Une variable, à partir du moment ou elle est définit en dehors d'une fonction est une globale.
(Le mot clef global permet dans une fonction d'utiliser la globale indiquée).

http://www.php.net/manual/fr/language.variables.scope.php


RE: register_globals ? - Anthor - 18-01-2011

http://www.php.net/manual/fr/reserved.variables.globals.php


RE: register_globals ? - Argorate - 18-01-2011

Oui oui, je connais $GLOBALS (je faisais justement mumuse avec là), mais soit je ne suis jamais tombé dans ce cas chez moi, soit j'ai un comportement différent, je testerais ça ce soir Wink

thx.


RE: register_globals ? - Sephi-Chan - 18-01-2011

Déjà, pourquoi tu utilises $GLOBALS ?

Ensuite, le comportement que tu as est tout à fait normal (et la partie avec le $_GET ne sert à rien) et n'a rien à voir avec la directive register_globals.

Démonstration :


$test = 2;
var_dump($test); // 2
var_dump($GLOBALS['test']); // 2

$GLOBALS['test'] = 1;
var_dump($test); // 1
var_dump($GLOBALS['test']); // 1

$test = 3;
var_dump($test); // 3
var_dump($GLOBALS['test']); // 3


La directive register_globals à on sert juste à transformer $_GET['test'] en $test (idem pour $_POST et peut-être $_REQUEST).


Sephi-Chan


RE: register_globals ? - Argorate - 18-01-2011

Justement vu que le register_globals permettais l'association de $var et $_GET['var']
et que je pensais que $GLOBALS['var'] été indépendant de $var, je ne comprenais donc pas pourquoi ça faisais ça...

Mais effectivement, c'était une fausse idée de ma part, le $GLOBALS permet de récupérer des variables simple qui ne sont pas dans une fonction.
Donc en fait je n'étais jamais tombé sur ce cas avant c'est tout.

Merci pour la rectification Wink


RE: register_globals ? - niahoo - 18-01-2011

Je ne sais pas si tu l'as vu, mais faire un truc du genre
Code :
$_GET['TEST'] = 1;
ne crée pas la variable $TEST même avec register_globals à 'on' ; cela ne marche qu'au lancement du script, quand les données sont passées à PHP via le serveur HTTP qui lit l'URL.