On Tue, 15 Feb 2005, Andi Gutmans wrote:
This behavior makes some sort of sense. It happens when register_globals is on
which means you are supposed to be able to access $GLOBALS[] and it makes
sense for it to stay in sync with the global variables.
Yes, and register_globals=on is evil. That I do agree with. :)
And that was the initial response I had in mind for this bug report too.
Maybe $GLOBALS[] and $GLOBALS direct access are edge cases but should we
invest time and code to resolve this when we know it's a general problem
anyway?
Well, the patch is there and works with all cases I tried with and could
think of..but I'm all for removing register_globals altogether though. :)
Seriously, this is not consistent (you can't replace e.g. _GET like this)
so why not protect against it?
I cooked up a piece of PHP code to recreate $GLOBALS always when
register_globals=On but come on..it's slow and won't give you exactly
same result..
<?php
/*
* Protect GLOBALS by recreating it whenever register_globals = On
*/
if (ini_get('register_globals')) {
$superglobals = array (
'_SERVER' => $_SERVER,
'_ENV' => $_ENV,
'_FILES' => $_FILES,
'_COOKIE' => $_COOKIE,
'_POST' => $_POST,
'_GET' => $_GET
);
if (isset($_SESSION)) {
array_unshift($superglobals, array ('_SESSION' => $_SESSION));
}
$GLOBALS = array();
foreach ($superglobals as $sg_name => $sg_value) {
$GLOBALS[$sg_name] = $sg_value;
foreach ($sg_value as $name => $value) {
$GLOBALS[$name] = $value;
}
}
}
?>
It lacks the reference to itself of course but who needs that anyway? :)
So, do I post that as resolution for the bug or what?
--Jani
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php