>1) $GLOBALS, Where does this come from and where does this goes to? I >noticed there is no variable declaration for this, so I just know that it is >part of PHP codes, although I haven't figure out what is it part of.
Every variable you assign, change, or unset, or that comes in from the outside world, is in $GLOBALS. $GLOBALS is PHP's internal array of all variables with their values. Mucking directly with $GLOBALS in any way shape or form is almost-for-sure a Bad Idea (tm). [There are exceptions to this rule... If you know what you're doing well enough to be doing those exceptions, go for it.] >2) What would be the way to go to make it work, when changing it within this >script with register_global turned on to turned off? >--clip -- > while (list($var, $value) = each($GLOBALS[HTTP_POST_VARS]) > { > $GLOBALS[$var] = stripslashes(trim($value)); > } > reset ($GLOBALS[HTTP_POST_VARS]); >--clip-- >I tried different ways to make it work and I kept getting the error saying >" Variable passed to each() is not an array or object " >" Variable passed to reset() is not an array or object " if (isset($HTTP_POST_VARS)){ reset($HTTP_POST_VARS); while(list($var, $val) = each($HTTP_POST_VARS)){ $$var = $val; } } You could repeat this code for $HTTP_GET_VARS, $HTTP_COOKIE_VARS, etc. You could even do it, in order, for all of them, and essentially "undo" the turning off of register_globals. Once you've gone that far, it's only a step away to write an "import" function which takes variable names and/or source (POST, GET, COOKIE) and sucks in the variables you expect at the top of your script, without sucking in the potentially damaging crud of a hacker. # Untested code. YMMV. function import($variables = NULL, $source = NULL){ if (is_array($variables)){ while (list($var, $source) = $variables)){ # HACK!!! # If no source was supplied, the value is the variable, not the key. if (is_int($var){ import($var); } else{ import($var, $source); } } } else{ global $$var; if ($source === NULL){ # Should suck in the ordering from EGPCS thingie in php.ini, really. I'm lazy. if (isset($HTTP_POST_VARS[$var])){ $$var = $HTTP_POST_VARS[$var]; } elseif (isset($HTTP_GET_VARS[$var])){ $$var = $HTTP_GET_VARS[$var]; } # The remaining elseif clauses for COOKIE, ENV, etc are left as an exercise for the reader... } elseif ($variables != NULL){ $array = "HTTP_$source_VARS"; # This next bit might need some syntactic work with those {}s in there... Untested code, eh? if (isset({$$array}[$var])){ $$var = {$$array}[$var]; } } } } Sample usage, if I got the code correct: import("foo"); # Imports $foo just like PHP used to import("foo", 'POST'); # Imports $foo like PHP used to, but only if it's a POST. import(array('foo', 'bar'); # Imports $foo and $bar like PHP used to. import(array('foo'=>'POST', 'bar'=>'GET'); # Imports $foo from POST and $bar from GET like PHP used to... Okay, not a whole lot like PHP used to, but sorta. NOTE: If you know your code will never need to run on *older* versions of PHP, replace $HTTP_POST_VARS with that new-fangled $_POST variable. NOTE: All the solutions up to, but not includeing, "function import", completely bypass the entire *point* of not using register_globals in the first place. It should be considered a short-term solution. -- Like Music? http://l-i-e.com/artists.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php