> 2. use a .htaccess file to change register_globals for your
> domain / dir, as long as your Apache config file allows it.
> http://www.php.net/manual/en/configuration.php
As Justin stated, doing this (use of .htaccess) is possible
if your host allows it. The following will work in
.htaccess:
php_flag register_globals on
> 3. (untested) use ini_set() to turn them back on at a
> per-script or per-config file level.
> http://www.php.net/manual/en/function.ini-set.php
This will not work as expected, $_GET['foo'] will not
be $foo with register_globals set via ini_set().
> 4. add this code to the top of your pages, or in a common
> library of code / config file:
>
> foreach($GLOBALS as $key => $value)
> { $$key=$value; }
> ?>
This will not work, the whole point of register_globals is
to register variables into the global scope, which is what
$GLOBALS is. You're also trying to rewrite a ton of variables,
such as $_GET. Not a good idea. To see what I mean, try:
print_r($GLOBALS);
Also note that $GLOBALS lives within $GLOBALS. As do all
the PHP variables.
> If you have this url: page.php?foo=bah, with register_globals off,
> $foo will not be available in your script automatically, as it
> was in older PHP versions.
Just to be clear to everyone, register_globals is a directive that
can be set in php.ini any time, in any version of PHP. Also read
about the mysterious variables_order directive.
> Using the above code, we scroll through the $GLOBALS array, and for
> each key (eg foo) we assign a var of the same name (eg $foo) and
> assign it the matching value (eg $foo = "bah").
As stated above, this will not work. register_globals = on will
add 'foo' to $GLOBALS.
> I think foreach() was only available in newer versions of PHP
> though sorry.
foreach has been around since PHP 4.0.0, see php.net/foreach
for PHP 3 alternatives.
Now, to hack them old scripts to work, consider using either
extract() and/or import_request_variables(). These will allow
you to easily mimik register_globals at runtime. I believe
the following is a pretty good hack to get the job done:
Goal: register a lot of variables into the global scope
order: gpcss (order of $types_to_register)
$types_to_register = array('GET','POST','COOKIE','SESSION','SERVER');
foreach ($types_to_register as $type) {
$arr = @${'HTTP_' . $type . '_VARS'};
if (@count($arr) > 0) {
extract($arr, EXTR_OVERWRITE);
}
}
Granted that it may not be identical to your register_globals,
it may or may not be what you want so adjust accordingly.
I've posted a few related replies to this topic, see:
Re: Using the new AUTOGLOBALS
http://marc.theaimsgroup.com/?l=php-general&m=101803683730027
Re: tutorial on global variables
http://marc.theaimsgroup.com/?l=php-general&m=102036870428992
Regards,
Philip Olson
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php