Re: PHP 5 Strings are References?!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Chris wrote:
Richard Lynch wrote:



On Tue, March 29, 2005 7:58 pm, Chris said:


Richard Lynch wrote:


...


Are you sure you don't have register_globals enabled?

I tested Richards reproduce script on php 5.0.3 on a Debian machine with the following ini settings:

register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
magic_quotes_gpc = Off
magic_quotes_runtime = Off

(i.e. all relevant ini settings are php5 defaults)

and I get the same freakin' references from/in the SESSION array.



Actually, they *ARE* enabled by my webhost.

I don't really think that's relevant, however, as PHP is storing $name
back *IN* to my $_SESSION data, just because I did:
$name = $_SESSION['name'];
$name = "Fooey";

$name is a STRING.

It's not an object.

It should *NOT* be a Reference!

But it is a Reference, so changing $name alters $_SESSION['name']



Sorry, meant to reply to list, not just you.

All I'm saying is that Sessions act extremely oddly with register_globals enabled.

With register_globals on I believe the global variable, acts as a reference. It's not because it's a string, it's because it's a session variable, and it needs to keep track of changes to the variable.

I agree with Chris that register_globals can only cause more pain and misery :-/ but in this case the problem exists regardless of register_globals setting.

here is a func I sometimes use when going to war with a register_globals=On server :-)
nothing special and I blagged the idea from somewhere/someone (probably in the
user comments somewhere in the php manual :-/)

function unRegisterGlobals()
{
    if (ini_get('register_globals')) {
        $SGs = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET);
        if (isset($_SESSION)) { array_unshift($SGs, $_SESSION); }

        // SG == super global
        foreach ($SGs as $sg) {
            foreach ($sg as $k => $v) { unset($GLOBALS[ $k ]); }
        }

        ini_set('register_globals', false);
    }
}




-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux