我同意惠斯通的观点。get_defined_vars()
非常适合“多重未设置”技巧。下面的此方法取消设置所有变量。除了在 foreach 循环内的无名数组中找到的那些。
foreach(get_defined_vars() as $k=>$y){
if( !in_array( $k,
array(
'myRequredVariableName1',
'myRequredVariableName2',
'_ENV',
'_SESSION',
'_COOKIE',
'HTTP_SESSION_VARS',
'HTTP_COOKIE_VARS'
)))
{ $$k=null; unset($$k);}
unset($y, $k);
}
// Check for leftovers
header('Content-type:text/plain; charset=utf-8');
var_export(get_defined_vars());
exit;
这些值实际上是不带“$”的变量名称,其中变量变量unset($$k);
与 REAL 和定义的变量匹配,如果存在,则将其销毁。因此,通过这种方式,您可以完全控制系统剩余的内容。
请注意,某些共享主机设置仅依赖于 _SERVER 超全局变量,因此根本不需要 _ENV、HTTP_SESSION_VARS、HTTP_COOKIE_VARS。很可能您总是希望保留 _COOKIE 和 _SESSION,但不保留 _GET 和 _POST 或 _FILES。决定因人而异。在将这个技巧应用到您的生产环境之前,请自行测试并查看数组中应该包含哪些内容。