¿Sigue siendo viable $_SERVER['REQUEST_METHOD']?

Entonces, desde hace un tiempo he estado usando lo siguiente para verificar si se han configurado los datos de mi publicación.

if( ! empty( $_POST ) ) { }

Pero recientemente he estado viendo muchas publicaciones que dicen que lo anterior es un "truco" y lo siguiente es la forma "mejor" correcta.

if( $_SERVER[ 'REQUEST_METHOD' ] === 'POST' ) { }

Por recientemente solo quiero decir que lo he encontrado recientemente. Todas las publicaciones que discuten este método posterior son de 2009'ish. Un poco viejo para los estándares de codificación, así que creo que está bien obtener una nueva opinión sobre este tema.

He llegado a entender que los dos métodos son diferentes. El primero se considera un "truco" que solo verifica si se ha configurado la matriz de publicación, lo que sucederá si se realiza una solicitud de publicación. El segundo en realidad verifica el servidor para ver si se ha realizado una solicitud posterior. Me imagino que el segundo podría ser un poco más seguro, pero si la información se limpia de todos modos, no veo cómo hace mucha diferencia.

También he visto publicaciones que la última solo se usó en versiones de PHP <= 4 porque PHP todavía estaba usando el $_REQUEST global en este punto y esta fue la forma en que los codificadores de PHP utilizaron para determinar la fuente de ciertos parámetros de solicitud. No estoy seguro de cuán precisa es la última declaración, porque las preguntas que se plantean en las publicaciones anteriores son las mismas que las mías. Utilizan la publicación global y no la solicitud. Sin embargo, esta es una publicación más reciente que cualquiera de las otras (2011), y de una fuente en la que he llegado a confiar. Así que no estoy seguro de qué hacer con eso.

¿Y qué hacer al verificar get? He visto un par de lugares que dicen que el método de solicitud del servidor no parece funcionar en este caso, y solo puedo suponer que se debe a que la publicación reemplaza a get y el método de solicitud solo puede contener un parámetro. Entonces, si tiene tanto publicar como obtener datos, ¿qué hace? Un comentario en una de estas publicaciones sugiere usar la solicitud global en lugar de publicar y obtener, pero tengo la impresión de que es una mala idea.

Este planteamiento de « es la fuente más reciente que pude encontrar, y lo hice mirando las preguntas similares al costado antes de enviar. Pregunta específicamente sobre el uso de un valor de envío para verificar si se aprobó el formulario, pero también menciona el método de solicitud. Mucho de esto parece indicar que el último todavía se usa comúnmente. Entonces, ¿sigue siendo válido este consejo? ¿Comprobar el método de solicitud sigue siendo la mejor opción?

preguntado el 12 de junio de 12 a las 15:06

2 Respuestas

Sí, sigue ahí y sigue siendo 100 % fiable. El $_SERVER["REQUEST_METHOD"] PHP mismo establece var, según el método de solicitud real utilizado por la conexión del usuario. Un usuario no puede enviar un parámetro de consulta ni influir en el valor de esa variable, salvo cambiando el tipo de solicitud.

Tus if(!$_POST) no es fiable, porque IS es posible realizar una publicación pero no enviar ningún dato a través de ella, por ejemplo:

<form method="post">
<input type="submit" />
</form>

producirá una matriz $_POST vacía de este tipo: no hay elementos de formulario con nombre en el formulario, por lo que no se enviarán datos, pero aún se ha realizado un POST.

No me preocuparía que PHP4 no tenga este superglobal. PHP 4 es una versión de la edad de piedra, y el código que admite v4 pero construido sobre v5 tendrá que contener tantos trucos feos/repugnantes para lograr la compatibilidad con versiones anteriores que cualquier persona que tenga que trabajar en ese código sufrirá pesadillas. PHP 4 debe considerarse muerto y desaparecido.

Respondido el 12 de junio de 12 a las 16:06

Entonces, ¿cómo verificaría obtener variables? Con el método de solicitud como publicación, no puede usarlo nuevamente para verificar obtener. ¿O es solo que get ya no es confiable, por lo que lo mejor que se puede hacer es asegurarse de que la matriz no esté vacía? Por cierto: no estaba realmente preocupado por PHP4, la fuente de ese comentario lo explicaba como el motivo del método de solicitud, que aparentemente es incorrecto. - mseancole

¿Qué quieres decir con verificar obtener variables? por eso hay $_GETy $_POST por correo... - Marc B

tal vez un formulario con una sola casilla de verificación sería un ejemplo más realista de cuándo necesita detectar una publicación, pero podría no tener ningún valor. - cabra

Quiero decir, ¿hay algo similar para get. es decir($_SERVER[ 'REQUEST_METHOD' ] === 'GET') excepto que el ejemplo no funcionará si hay una sesión posterior porque la anula. ¿O sigo comprobando si la matriz de obtención está vacía? es decir(! empty( $_GET )) - mseancole

Oh. ¿Pasando get variables mientras haces una publicación? $_GET se establecerá independientemente del método de solicitud si hay variables de consulta en la URL. Solo verifique si el var de obtención que desea está allí, p. if (isset($_GET['queryvar'])) { ... }. - Marc B

Yo siempre uso el $_SERVER['REQUEST_METHOD']; variable para verificar el método de solicitud.

Esta variable también dice si la solicitud es un 'GET','HEAD','POST"O"PUT' solicitud.

http://php.net/manual/en/reserved.variables.server.php

Respondido el 12 de junio de 12 a las 16:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.