función de PHP para el cotejo de las variables externas en un único objeto, independientemente de GET o POST
-
22-08-2019 - |
Pregunta
Recuerdo la revisión de otro código PHP una vez y tenía un método de función o clase que rodó todas las variables GET y POST en un único objeto viejo y simple, que luego podrían pasar alrededor. Si el mismo par nombre-valor surgieron en ambas GET y POST, POST ganaría.
¿Existe un PHP así codificado-complemento por ahí de cualquier tipo que hace exactamente esto?
Solución
Usted podría utilizar $_REQUEST
, pero tenga en cuenta que contiene el contenido de $_GET
, $_POST
y $_COOKIE
, y que la presencia (y el orden, para sobrescribir los propósitos) de las variables en este superglobal está sujeta a la configuración en el entorno de ejecución.
Si esto está causando problemas, podría ser una buena idea para enrollar una versión simple, el quid de lo que sería algo así como
$requestData = array_merge( $_GET, $_POST );
A continuación, puede terminar con esto de alguna manera, tal vez proporcionar funcionalidad adicional útil, por ejemplo, aplicar automáticamente a los valores stripslashes()
destrozados usando magic_quotes
, que proporciona valores por defecto para las variables que faltan, etc.
Otros consejos
La fusión de ambas variables (o usando $_REQUEST
o Register Globals vez ) puede causar problemas de seguridad ya que no puede identificar definitivamente la fuente de sus valores. Así que cuando se accede a $_REQUEST['foobar']
no se puede saber si el valor se ha enviado a través de URL, el cuerpo POST o Cookie. Esto puede hacer que la escritura vulnerables para Cross-Site Request Falsificación .
Así que os recomiendo ir para la seguridad sobre la comodidad y el uso de estas variables en los que espera sus valores vienen. $_GET
para los argumentos que se espera que ser aprobado por el URL, $_POST
para los aprobados a través de POST y $_COOKIE
para las cookies.
Me considero una mala práctica a confundir con $_GET
$_POST
. Están destinadas a cosas completamente diferentes, y tratándolos como iguales, que están haciendo mal uso de manera efectiva el protocolo HTTP. Como se ha mencionado, $_REQUEST
hace lo que quiere, pero es un poco impredecible. Desde aquí se puede escribir su propia función global para hacer lo mismo:
function param($name, $default = null) {
return isset($_POST[$name])
? $_POST[$name]
: (isset($_GET[$name])
? $_GET[$name]
: $default);
}
Pero en realidad .. es una mala práctica.
puede utilizar $ _REQUEST variable global. que se define por el PHP interpretado de forma predeterminada cuando se ejecuta la aplicación en SAPI Web (CGI o módulo de servidor web), que es el caso de su aplicación cuando está escribiendo aplicaciones basadas en web utilizando PHP. $ _REQUEST es una matriz asociativa de todos los datos en $ _GET y $ _POST y se define por defecto. no se necesita ninguna extensión / Librari utilizarlo.
Esta es la clase de mi marco que maneja globales en toda la aplicación. Sin procesamiento de las variables se hace aquí.
class stGlobal
{
//instance
private static $instance;
//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';
private function initialize()
{
$this->post = $_POST;
$this->get = $_GET;
$this->files = $_FILES;
$this->request = $_REQUEST;
}
public function getInstance()
{
if (!isset(self::$instance))
{
$class = __CLASS__;
self::$instance = new $class();
self::$instance->initialize();
}
return self::$instance;
}
}
Para utilizarlo en cualquier lugar
$myObj = stGlobal::getInstance();