variable - $_REQUEST superarray no inicializado en array $ GLOBALS
variables session php (3)
PROBLEMA
Entonces, tengo esta función para recuperar y continuar con los datos de las matrices $ _REQUEST, $ _POST, $ _GET o $ _COOKIE. Sé qué matriz usar solo desde la llamada a la función. Ex simplificado:
function gg( $name, $type="_REQUEST" ) {
return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false;
}
Y funciona perfectamente para llamadas como:
gg(''var'', ''_GET'');
gg(''var2'', ''_POST'');
Pero falla dramáticamente por:
gg(''var'');
// or
gg(''var'', ''_REQUEST'');
Logré simplificar este problema en 2 líneas:
print_r( $GLOBALS[''_REQUEST''] ); // this line returns nothing...
print_r( $_REQUEST ); // ...UNLESS this line is present anywhere in the code
Ahora, mi pregunta obvia es: ¿Hay alguna necesidad de inicializar esta matriz $ _REQUEST para estar presente en $ GLOBALS?
información adicional:
php: 5.3.3-7
apache: 2.2.16
also I''m running on CGI/FastCGI
EDITAR Y SOLUCION
1
Como se encuentra aquí, la solución más fácil sería editar php.ini y cambiar el valor de auto_globals_jit de On a Off.
auto_globals_jit Off
2
En lugar de esto, puede usar ini_set () dentro de su archivo de origen, sin embargo, no funcionó para mí ...
ini_set("auto_globals_jit", "Off");
3
Otra solución más es usar la matriz $ GLOBALS para todo excepto $ _REQUEST y para las solicitudes $ _REQUEST llamar directamente a la matriz $ _REQUEST: D
if($type == "REQUEST") return $_REQUEST[$name];
else return ${"_".$type}[$name]; // or $GLOBALS["_".$type][$name] if previous won''t work
$ _REQUEST ya es un superglobal "lo que significa que están disponibles en todos los ámbitos a lo largo de un script. No es necesario hacer global $ variable, para acceder a ellos dentro de funciones o métodos".
function gg( $name, $type="_REQUEST" ) {
switch ($type) {
case ''_REQUEST'':
return $_REQUEST[$name];
break;
case ''GLOBALS'':
return $_GLOBALS[$name];
break;
// etc...
default
return false;
}
Solo un consejo:
function gg( $name, $type="_REQUEST" ) {
if($type=="_REQUEST")return $GLOBALS[$name];
return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false;
}
Una vez que haya hecho una función como la tuya:
function get_data($name)
{
if(isset($_GET[$name]))return $_GET[$name];
if(isset($_POST[$name]))return $_POST[$name];
}
¿No se pudo replicar esto en mi configuración por lo que podría ser un problema CGI? Como solución, podrías hacer algo como esto ...
function gg( $name, $type="_REQUEST" ) {
return isset( ${$type}[$name] ) ? ${$type}[$name] : false;
}
Podría ser de interés:
A partir de PHP 5.4 $ GLOBALS ahora se inicializa justo a tiempo. Esto significa que ahora existe la ventaja de no utilizar la variable $ GLOBALS ya que puede evitar la sobrecarga de inicializarla. http://www.php.net/manual/en/reserved.variables.globals.php
Actualizar. Ver la publicación: