w3schools variable superglobales paginas manejo globales entre _server _request request php globals superglobals

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:

$ _REQUEST no creado cuando se usan variables variables