+1 a eso: en caso de duda, var_dump ($ _ SERVER) y la respuesta a menudo se encuentran dentro.
Paul Dixon
10
¿Qué sucede si PUBLICAS en mypage.php? Var = something?
nickf
2
El método será POST, pero si tiene que usar $ _GET para obtener esas variables, no estoy seguro.
OIS
24
@NathanLong En mi experiencia eso es incorrecto. Si la POST para mypage.php? Var = algo, entonces 'algo' estará en $_GET['var'].
David Gallagher
14
$_POSTy $_GETson algo lamentablemente nombrados. $_GETcontienen variables del componente de consulta de la URL, independientemente del método HTTP. $_POSTcontendrá campos de formulario si la solicitud se envió como application/x-www-form-urlencoded.
Pj Dietz
223
REST en PHP se puede hacer bastante simple. Cree http://example.com/test.php (descrito a continuación). Use esto para llamadas REST, por ejemplo, http://example.com/test.php/testing/123/hello . Esto funciona con Apache y Lighttpd listos para usar, y no se necesitan reglas de reescritura.
Si desea tener su API disponible, sin citar qué motor de interpretación está utilizando, agregue un archivo .htaccess que contenga RewriteEngine en RewriteRule ^ api /(.*)$ api.php / $ 1 Esto supone que su archivo API se llama api. php. Además, desde que se escribió el bloque de código anterior, los desarrolladores de PHP han depreciado la función de división. funciona bien si reemplaza dividir con explotar.
JonTheNiceGuy
10
¿Qué pasa con el @frente de $_SERVER['PATH_INFO']?
Svish
10
@Svish, ¡qué gran detalle notaste! Se elimina PHP Notice: Undefined index: PATH_INFOen caso de que PATH_INFO no esté en $_SERVER. ¡Estoy agregando esto a mi bolsa de trucos de inmediato! Es una forma de decir "Sé que puede que no haya una entrada con ese nombre en esta matriz, y estoy listo para eso, así que cállate y haz lo que te digo". :) Gracias chicos, tanto por publicar esta respuesta como por llamar mi atención sobre ese personaje en particular.
inkredibl
16
Usualmente uso a! Empty en lugar de @. ¿Mejor práctica?
geilt
8
Como una forma más concisa utilizando métodos variables: <?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
SandWyrm
21
La detección del llamado método HTTP REQUEST METHODse puede hacer usando el siguiente fragmento de código.
$method = $_SERVER['REQUEST_METHOD'];if($method =='POST'){// Method is POST} elseif ($method =='GET'){// Method is GET} elseif ($method =='PUT'){// Method is PUT} elseif ($method =='DELETE'){// Method is DELETE}else{// Method unknown}
También puede hacerlo usando un switchsi lo prefiere sobre la if-elsedeclaración.
Si se requiere un método distinto de GETo POSTen un formulario HTML, esto a menudo se resuelve utilizando un campo oculto en el formulario.
<!-- DELETE method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="DELETE"></form><!-- PUT method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="PUT"></form>
Para obtener más información sobre los métodos HTTP, me gustaría consultar la siguiente pregunta de StackOverflow:
Como se trata de REST, no basta con obtener el método de solicitud del servidor. También debe recibir los parámetros de ruta RESTful. La razón para separar los parámetros RESTful y los parámetros GET / POST / PUT es que un recurso debe tener su propia URL única para su identificación.
Aquí hay una forma de implementar rutas RESTful en PHP usando Slim:
El caso "DELETE" nunca se verá afectado porque ese no es un REQUEST_METHOD posible. Los REQUEST_METHOD válidos son 'GET', 'HEAD', 'POST', 'PUT'. Lea la documentación (señalada en numerosas respuestas en esta misma página) antes de publicar una respuesta.
Patrick
1
@Patrick, en realidad, el caso "DELETE" tendrá éxito cuando el método de solicitud sea DELETE; No obstante, la documentación en PHP no lo menciona. De hecho, cualquier método se refleja $_SERVER['REQUEST_METHOD'], incluso los personalizados. Recuerde que el método es solo una cadena en el encabezado de la solicitud y que es nuestra tarea verificar su corrección.
Ivan De Paz Centeno
1
@Patrick DELETE se define en RFC7231 y es compatible con todos los principales navegadores. tools.ietf.org/html/rfc7231#section-4.3.5 y $ _SERVER ["REQUEST_METHOD"] es solo una cadena.
Robert Talada
@IvanDePazCenteno Exactamente. Nunca confíes en la entrada del usuario. Nunca confíes en la entrada del usuario.
Puede hacer en el controlador $ request = $ this-> getRequest (). Y luego, $ request-> isPost (). Consulte también $ request-> getMethod ().
Vasiliy Toporov
4
En core php puedes hacer así:
<?php
$method = $_SERVER['REQUEST_METHOD'];switch($method){case'GET'://Here Handle GET Request
echo 'You are using '.$method.' Method';break;case'POST'://Here Handle POST Request
echo 'You are using '.$method.' Method';break;case'PUT'://Here Handle PUT Request
echo 'You are using '.$method.' Method';break;case'PATCH'://Here Handle PATCH Request
echo 'You are using '.$method.' Method';break;case'DELETE'://Here Handle DELETE Request
echo 'You are using '.$method.' Method';break;case'COPY'://Here Handle COPY Request
echo 'You are using '.$method.' Method';break;case'OPTIONS'://Here Handle OPTIONS Request
echo 'You are using '.$method.' Method';break;case'LINK'://Here Handle LINK Request
echo 'You are using '.$method.' Method';break;case'UNLINK'://Here Handle UNLINK Request
echo 'You are using '.$method.' Method';break;case'PURGE'://Here Handle PURGE Request
echo 'You are using '.$method.' Method';break;case'LOCK'://Here Handle LOCK Request
echo 'You are using '.$method.' Method';break;case'UNLOCK'://Here Handle UNLOCK Request
echo 'You are using '.$method.' Method';break;case'PROPFIND'://Here Handle PROPFIND Request
echo 'You are using '.$method.' Method';break;case'VIEW'://Here Handle VIEW Request
echo 'You are using '.$method.' Method';break;Default:
echo 'You are using '.$method.' Method';break;}?>
También es valioso tener en cuenta que PHP completará todos los $_GETparámetros incluso cuando envíe una solicitud adecuada de otro tipo.
Métodos en respuestas anteriores son completamente correctas, sin embargo si quieres adicionalmente cheque de GETparámetros durante la manipulación POST, DELETE, PUT, etc. solicitud, es necesario comprobar el tamaño de la $_GETmatriz.
PATCH
?$_SERVER['REQUEST_METHOD'] === 'PATCH'
Respuestas:
Mediante el uso
Ejemplo
Para obtener más detalles, consulte la documentación de la variable $ _SERVER .
fuente
$_GET['var']
.$_POST
y$_GET
son algo lamentablemente nombrados.$_GET
contienen variables del componente de consulta de la URL, independientemente del método HTTP.$_POST
contendrá campos de formulario si la solicitud se envió comoapplication/x-www-form-urlencoded
.REST en PHP se puede hacer bastante simple. Cree http://example.com/test.php (descrito a continuación). Use esto para llamadas REST, por ejemplo, http://example.com/test.php/testing/123/hello . Esto funciona con Apache y Lighttpd listos para usar, y no se necesitan reglas de reescritura.
fuente
@
frente de$_SERVER['PATH_INFO']
?PHP Notice: Undefined index: PATH_INFO
en caso de que PATH_INFO no esté en$_SERVER
. ¡Estoy agregando esto a mi bolsa de trucos de inmediato! Es una forma de decir "Sé que puede que no haya una entrada con ese nombre en esta matriz, y estoy listo para eso, así que cállate y haz lo que te digo". :) Gracias chicos, tanto por publicar esta respuesta como por llamar mi atención sobre ese personaje en particular.<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
La detección del llamado método HTTP
REQUEST METHOD
se puede hacer usando el siguiente fragmento de código.También puede hacerlo usando un
switch
si lo prefiere sobre laif-else
declaración.Si se requiere un método distinto de
GET
oPOST
en un formulario HTML, esto a menudo se resuelve utilizando un campo oculto en el formulario.Para obtener más información sobre los métodos HTTP, me gustaría consultar la siguiente pregunta de StackOverflow:
PUT y DELETE del protocolo HTTP y su uso en PHP
fuente
También podemos usar input_filter para detectar el método de solicitud y al mismo tiempo proporcionar seguridad a través del saneamiento de entrada.
fuente
Como se trata de REST, no basta con obtener el método de solicitud del servidor. También debe recibir los parámetros de ruta RESTful. La razón para separar los parámetros RESTful y los parámetros GET / POST / PUT es que un recurso debe tener su propia URL única para su identificación.
Aquí hay una forma de implementar rutas RESTful en PHP usando Slim:
https://github.com/codeguy/Slim
Y configure el servidor en consecuencia.
Aquí hay otro ejemplo usando AltoRouter:
https://github.com/dannyvankooten/AltoRouter
fuente
Puede usar la
getenv
función y no tiene que trabajar con una$_SERVER
variable:Más información:
http://php.net/manual/en/function.getenv.php
fuente
Ejemplo:
fuente
$_SERVER['REQUEST_METHOD']
, incluso los personalizados. Recuerde que el método es solo una cadena en el encabezado de la solicitud y que es nuestra tarea verificar su corrección.De esta manera también puede lograr en zend framework 2 también. Gracias.
fuente
En core php puedes hacer así:
fuente
También es valioso tener en cuenta que PHP completará todos los
$_GET
parámetros incluso cuando envíe una solicitud adecuada de otro tipo.Métodos en respuestas anteriores son completamente correctas, sin embargo si quieres adicionalmente cheque de
GET
parámetros durante la manipulaciónPOST
,DELETE
,PUT
, etc. solicitud, es necesario comprobar el tamaño de la$_GET
matriz.fuente
Cuando se solicitó un método, tendrá un
array
. Así que simplemente consulte concount()
.3v4l.org/U51TE
fuente
Usé este código. Deberia de funcionar.
Este código anterior funcionará
REST calls
y también funcionará conhtml form
fuente
Puede obtener cualquier información de cadena de consulta, es decir
www.example.com?id=2&name=r
Debe obtener datos utilizando
$_GET['id']
o$_REQUEST['id']
.Publicar datos significa como formulario
<form action='' method='POST'>
que debe usar$_POST
o$_REQUEST
.fuente