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



Reply via email to