¿Cuál de estos códigos será más rápido?
$temp = $_REQUEST['s'];
o
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
¿Cuál de estos códigos será más rápido?
$temp = $_REQUEST['s'];
o
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Respuestas:
$_REQUEST
, Por defecto, contiene el contenido de $_GET
, $_POST
y$_COOKIE
.
Pero es solo un valor predeterminado, que depende de variables_order
; y no estoy seguro de querer trabajar con cookies.
Si tuviera que elegir, probablemente no usaría $_REQUEST
, y elegiría $_GET
o $_POST
, dependiendo de lo que debería hacer mi aplicación (es decir, una u otra, pero no ambas) : en general:
$_GET
cuando alguien solicita datos de su aplicación.$_POST
cuando alguien está empujando (insertando o actualizando; o eliminando) datos a su aplicación.De cualquier manera, no habrá mucha diferencia sobre las actuaciones: la diferencia será insignificante, en comparación con lo que hará el resto de su guión.
OBTENER vs. POSTAR
1) Tanto GET como POST crean una matriz (por ejemplo, matriz (clave => valor, clave2 => valor2, clave3 => valor3, ...)). Esta matriz contiene pares clave / valor, donde las claves son los nombres de los controles del formulario y los valores son los datos de entrada del usuario.
2) Tanto GET como POST se tratan como $ _GET y $ _POST. Estos son superglobales, lo que significa que siempre son accesibles, independientemente del alcance, y puede acceder a ellos desde cualquier función, clase o archivo sin tener que hacer nada especial.
3) $ _GET es una matriz de variables pasadas al script actual a través de los parámetros de URL.
4) $ _POST es una matriz de variables pasadas al script actual a través del método HTTP POST.
¿Cuándo usar GET?
La información enviada desde un formulario con el método GET es visible para todos (todos los nombres y valores de las variables se muestran en la URL). GET también tiene límites en la cantidad de información a enviar. La limitación es de unos 2000 caracteres. Sin embargo, debido a que las variables se muestran en la URL, es posible marcar la página. Esto puede ser útil en algunos casos.
GET puede usarse para enviar datos no confidenciales.
Nota: ¡GET NUNCA debe usarse para enviar contraseñas u otra información confidencial!
¿Cuándo usar POST?
La información enviada desde un formulario con el método POST es invisible para otros (todos los nombres / valores están integrados en el cuerpo de la solicitud HTTP) y no tiene límites en la cantidad de información a enviar.
Además, POST admite funcionalidades avanzadas, como la compatibilidad con entradas binarias de varias partes al cargar archivos al servidor.
Sin embargo, debido a que las variables no se muestran en la URL, no es posible marcar la página.
$ _GET recupera variables de la cadena de consulta o su URL.>
$ _POST recupera variables de un método POST, como los formularios (generalmente).
$ _REQUEST es una fusión de $ _GET y $ _POST donde $ _POST anula $ _GET. Es bueno usar $ _REQUEST en formularios autorreferenciales para validaciones.
GET
de la cadena de consulta, POST
del envío del formulario).
Sugeriría usar $_POST
y$_GET
explícitamente.
Usar $ _REQUEST debería ser innecesario con el diseño adecuado del sitio de todos modos, y viene con algunas desventajas, como dejarlo abierto para que sea más fácil CSRF/XSS
ataques y otras tonterías que provienen del almacenamiento de datos en la URL.
La diferencia de velocidad debe ser mínima en ambos sentidos.
Utilice SOLICITUD. A nadie le importa la velocidad de una operación tan simple, y es un código mucho más limpio.
$_REQUEST
es la conclusión incorrecta. Mira mi respuesta.
No te preocupes Pero todavía se debe usar la segunda solución (más un cheque adicional para ninguna de las variables existentes), porque hay problemas de seguridad con $_REQUEST
(puesto $_GET
y$_POST
no son las únicas fuentes de esa matriz).
Hubo una publicación sobre los problemas con $_REQUEST
ayer, creo. Déjame ir a buscarlo.
EDITAR : Bueno, no directamente una publicación, pero aquí está de todos modos: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Úselo porque es más seguro y no hará una diferencia de velocidad notable
$_REQUEST
pero aún permite acceder al mismo script de cualquier manera (en mi caso, el mismo script se usa con diferentes 'acciones' y algunas veces $ _GET estaría bien, pero otras veces necesito $ _POST para ocultar / asegurar los datos).
Hay ciertas preocupaciones de seguridad involucradas ya que un hacker puede configurar una cookie que anulará un valor de $ _POST o $ _GET. Si maneja datos confidenciales, no recomendaría usar $ _REQUEST. - Xandor
no se puede usar como $_GET
alternativa $_POST
en algún caso.
Cuando ??
GET
También tiene límites en la cantidad de información a enviar. La limitación es de unos 2000 caracteres.
Otra cosa es que hay pocos casos en los que no puede recuperar datos usando $_POST
Cuando ?
Para servicio de descanso
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
No hay nada de malo en usar $_REQUEST
.
Pero la forma de hacerlo es verificar $ _SERVER ['REQUEST_METHOD'] explícitamente, no confiar en que $ _POST esté vacío para GET.
$_SERVER['REQUEST_METHOD']
para verificar si el script se llamará con cualquiera de los dos. Pero decir que no hay nada malo $_REQUEST
no es 100% cierto. Hay ciertos problemas de seguridad involucrados ya que un hacker puede configurar una cookie que anulará un valor de $ _POST o $ _GET. Si maneja datos confidenciales, no recomendaría usarlos $_REQUEST
.
$ _GET recupera variables de la cadena de consulta o su URL.>
$ _POST recupera variables de un método POST, como los formularios (generalmente).
$ _REQUEST es una fusión de $ _GET y $ _POST donde $ _POST anula $ _GET. Es bueno usar $ _REQUEST en formularios autorreferenciales para validaciones.
request_order
y también puede contener valores de cookies, por lo que no es una característica muy confiable ni útil.
Usaría el segundo método ya que es más explícito. De lo contrario, no sabes de dónde vienen las variables.
¿Por qué necesita verificar GET y POST de todos modos? Seguramente usar uno u otro solo tiene más sentido.
GET
se usa solo para un elemento (por ejemplo, moverlo) y POST
para varios de ellos (un formulario con casillas de verificación ...).
Solo uso _GET o _POST. Prefiero tener el control.
Lo que no me gusta de ninguno de los fragmentos de código en el OP es que descartan la información sobre la cual se utilizó el método HTTP. Y esa información es importante para la desinfección de insumos.
Por ejemplo, si un script acepta datos de un formulario que se va a ingresar en la base de datos, entonces el formulario debería usar POST ( use GET solo para acciones idempotentes) ). Pero si el script recibe los datos de entrada a través del método GET, entonces (normalmente) debería ser rechazado. Para mí, tal situación podría justificar escribir una violación de seguridad en el registro de errores, ya que es una señal de que alguien está probando algo.
Con cualquiera de los fragmentos de código en el OP, esta desinfección no sería posible.
$_POST
es evitar que los rastreadores de motores de búsqueda hagan algo como esto: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Yo usaría $_POST
, y $_GET
porque diferente de $_REQUEST
su contenido no está influenciado por variables_order
.
Cuándo usarlo $_POST
y $_GET
depende de qué tipo de operación se esté ejecutando. Una operación que cambia los datos manejados desde el servidor debe hacerse a través de una solicitud POST, mientras que las otras operaciones deben hacerse a través de una solicitud GET. Para hacer un ejemplo, una operación que elimina una cuenta de usuario no debe ejecutarse directamente después de que el usuario haga clic en un enlace, mientras que la visualización de una imagen se puede hacer a través de un enlace.
Yo uso esto,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
la declaración valida si $ _REQUEST tiene más de un parámetro (el primer parámetro en $ _REQUEST será la uri de solicitud que se puede usar cuando sea necesario, algunos paquetes PHP no devolverán $ _GET, así que verifique si son más de 1 para $ _GET, por predeterminado, será $ _POST.
Estás optimizando prematuramente. Además, realmente debería pensar si GET debe usarse para cosas que está PUBLICANDO, por razones de seguridad.
Es feo y no lo recomendaría como una solución final al insertar código en vivo, pero al crear funciones de descanso, a veces es útil tener un capturador de parámetros 'general':
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
Alguien creativo probablemente podría incluso agregarle para manejar los parámetros de la línea de comandos o lo que sea que provenga de su IDE. Una vez que decida qué está haciendo una función de descanso determinada, puede elegir una adecuada para esa llamada dada para asegurarse de obtener lo que necesita para la versión de implementación. Esto supone que 'REQUEST_METHOD' está configurado.
!isset($_REQUEST['s'])
.