> Manuales > Taller de PHP

Cómo hacer que unas variables globales como son GET, SESSION y POST se traten como variables normales en PHP.

Hace un par de semanas se me encomendó migrar un sitio (desarrollado en php) de servidor, el tema iba relativamente en paz hasta que di cuenta de un problema recurrente en este tipo de situaciones, el servidor antiguo tenia las variables globales en On y el nuevo las tenia en Off ... recurrente no ?

La verdad es que no quise complicarme la vida como otras veces, y me di cuenta de algo que me podría ahorrar un par de horas de trabajo, todos los php hacían un include a un archivo php, recurrente también no?
Asi es que me puse a pensar en un pedazo de código que me permitiera tomar estos 3 tipos de variables (SESSION, POST Y GET) y me las dejara como variables normales, si no lo tienen claro el ejercicio es mas o menos el siguiente :

Supongamos que la variable viene desde un formulario via POST, el código decía algo asi ...

<?

if ($variable == "algo")
{
    echo "esta variable hace alguna cosa";
}

?>


Es decir, le faltaba esta instrucción antes del if

<?php

$variable = $_POST["variable"]; // le faltaba esta instrucción antes del if

if ($variable == "algo")
{
    echo "esta variable hace alguna cosa";
}

?>


Tenia 2 opciones, o me ponía a buscar TODAS estas situaciones y las arreglaba una a una, o colocaba un pedazo de código en archivo al que todos los demás le hacían un include que me corrigiera este "error" propio de aquellos que estamos a trabajar con los "servidores en producción", o sea, con las variables globales en On.

Bueno, después de muchos cabecearme encontré la solución, y aquí la muestro a todos uds.

<?

if($_POST)
{
    $keys_post = array_keys($_POST);
    foreach ($keys_post as $key_post)
     {
      $$key_post = $_POST[$key_post];
      error_log("variable $key_post viene desde $ _POST");
     }
}

if($_GET)
{
    $keys_get = array_keys($_GET);
    foreach ($keys_get as $key_get)
     {
        $$key_get = $_GET[$key_get];
        error_log("variable $key_get viene desde $ _GET");
     }
}

if($_SESSION)
{
    $keys_sesion = array_keys($_SESSION);
    foreach ($keys_sesion as $key_sesion)
     {
       $$key_sesion = $_SESSION[$key_sesion];
       error_log("variable $key_sesion viene desde $ _SESSION");
     }
}

?>


Son básicamente 3 if que hacen lo mismo, toman las claves del arreglo en cuestión (SESSION , POST o GET) y generan una "variable variable", creo que hay un articulo en desarrolloweb que habla de este tema, y esto hace toda la magia, el error_log fue una implementación para ver que variables se iban ocupando (si no tienes acceso al servidor puedes sacarlo sin problemas).

Para alguien que guste de las funciones puede también guardarlo como función y llamarla cuando lo necesite. O también iterar el proceso con las 3 variables en cuestión para no tener que hacer 3 if, o pasarle cualquier arreglo para que haga el mismo proceso ... en fin, la idea esta, solo espero haber contribuido en algo al ahorro de tiempo de alguno de ustedes.

Juan Edgardo Jorquera Uribe

Analista Programador

Manual