问题
所以,我有这个函数可以从 $_REQUEST、$_POST、$_GET 或 $_COOKIE 数组中检索和处理数据。我知道仅从函数调用中使用哪个数组。简化前:
function gg( $name, $type="_REQUEST" ) {
return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false;
}
它非常适合以下调用:
gg('var', '_GET');
gg('var2', '_POST');
但因以下原因而失败:
gg('var');
// or
gg('var', '_REQUEST');
我设法将这个问题简化为 2 行:
print_r( $GLOBALS['_REQUEST'] ); // this line returns nothing...
print_r( $_REQUEST ); // ...UNLESS this line is present anywhere in the code
现在,我的明显问题是:是否有必要将这个 $_REQUEST 数组初始化为存在于 $GLOBALS 中?
附加信息:
php: 5.3.3-7
apache: 2.2.16
also I'm running on CGI/FastCGI
编辑和解决方案
1
如发现这里最简单的解决方案是编辑 php.ini 并将auto_globals_jit的值从 On 更改为 Off。
auto_globals_jit Off
2
您可以在源文件中使用ini_set()而不是这个,但是它对我不起作用...
ini_set("auto_globals_jit", "Off");
3
另一种解决方案是对除$_REQUEST之外的所有内容使用$GLOBALS数组,对于 $_REQUEST 请求,直接调用 $_REQUEST 数组:D
if($type == "REQUEST") return $_REQUEST[$name];
else return ${"_".$type}[$name]; // or $GLOBALS["_".$type][$name] if previous won't work