php模拟开启全局变量,模拟关闭全局变量

<?php
// 如果需要在一台关闭了 register_globals 的共享主机上运行一些旧式程序而该程序需要此选项打开时怎么办?
// Emulate 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);

 }

}

?>



<?php

// 如果需要在一些打开了register_globals选项的主机上但想消除安全隐患,该怎么办?
// Emulate register_globals off

functionun register_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();

?>