Com as instruções abaixo é possível ligar e desligar register_globals sem ter de mudar nada no php.ini
Isso é muito útil em servidores compartilhados:
Isto irá emular register_globals On. Se você alterou a sua diretiva variables_order, considere mudar $superglobals de acordo.
<?php
// Emular register_globals on
if (!ini_get('register_globals')) {
$superglobals = array($_SERVER, $_ENV,
$_FILES, $_COOKIE, $_POST, $_GET);
if (isset(
$_SESSION)) {
array_unshift($superglobals, $_SESSION);
}
foreach (
$superglobals as $superglobal) {
extract($superglobal, EXTR_SKIP);
}
}
?>

Isto irá emular register_globals Off. Tenha em mente que este código deve ser chamado bem no início do seu script, ou após session_start() se você o usa para iniciar a sua sessão.
<?php
// Emula register_globals off
function unregister_GLOBALS()
{
if (!
ini_get('register_globals')) {
return;
}

// Might want to change this perhaps to a nicer error
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
die(
'GLOBALS overwrite attempt detected');
}

// Variables that shouldn't be unset
$noUnset = array('GLOBALS', '_GET',
'_POST', '_COOKIE',
'_REQUEST', '_SERVER',
'_ENV', '_FILES');

$input = array_merge($_GET, $_POST,
$_COOKIE, $_SERVER,
$_ENV, $_FILES,
isset(
$_SESSION) && is_array($_SESSION) ? $_SESSION : array());

foreach (

$input as $k => $v) {
if (!
in_array($k, $noUnset) && isset($GLOBALS[$k])) {
unset(
$GLOBALS[$k]);
}
}
}

unregister_GLOBALS();

?>