+1 a isso - em caso de dúvida, var_dump ($ _ SERVER) e a resposta geralmente está dentro.
Paul Dixon
10
O que acontece se você POSTAR para mypage.php? Var = alguma coisa?
nickf
2
O método será POST, mas se você precisar usar $ _GET para obter essas variáveis, não tenho certeza.
OIS
24
@ NathanLong Na minha experiência, isso está incorreto. Se você postar em mypage.php? Var = alguma coisa, então 'alguma' estará dentro $_GET['var'].
David Gallagher
14
$_POSTe $_GETsão um pouco infelizmente chamados. $_GETcontêm variáveis do componente de consulta da URL, independentemente do método HTTP. $_POSTconterá campos de formulário se a solicitação foi enviada como application/x-www-form-urlencoded.
Pj Dietz
223
O REST em PHP pode ser feito de maneira bastante simples. Crie http://example.com/test.php (descrito abaixo). Use isso para chamadas REST, por exemplo, http://example.com/test.php/testing/123/hello . Isso funciona com o Apache e o Lighttpd imediatamente, e não são necessárias regras de reescrita.
Se você deseja ter sua API disponível, sem citar qual mecanismo de interpretação você está usando, adicione um arquivo .htaccess contendo RewriteEngine em RewriteRule ^ api /(.*)$ api.php / $ 1 Isso pressupõe que seu arquivo API seja chamado api. php. Além disso, desde que o bloco de código acima foi escrito, os desenvolvedores do PHP depreciaram a função de divisão. funciona bem se você substituir a divisão por explodir.
precisa saber é o seguinte
10
O que há com isso @na frente $_SERVER['PATH_INFO']?
Svish
10
@Svish, que grande detalhe você notou! Ele é eliminado PHP Notice: Undefined index: PATH_INFOcaso o PATH_INFO não esteja $_SERVER. Estou adicionando isso ao meu pacote de truques imediatamente! É uma maneira de dizer "Eu sei que pode não haver uma entrada com esse nome nessa matriz, e estou pronto para isso, então cale a boca e faça o que eu mandar". :) Obrigado pessoal, por postar esta resposta e por chamar minha atenção para esse personagem em particular.
inkredibl
16
Eu normalmente uso um! Vazio em vez de @. Melhor prática?
geilt
8
Como uma maneira mais concisa, usando métodos variáveis: <?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
SandWyrm 31/07
21
A detecção do método HTTP ou dos chamados REQUEST METHODpode ser feita usando o seguinte snippet 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}
Você também pode fazer isso usando a switchse preferir isso ao invés deif-else declaração.
Se um método diferente GETou POSTfor necessário em um formulário HTML, isso geralmente é resolvido usando um campo oculto no formulário.
<!-- 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 obter mais informações sobre métodos HTTP, gostaria de me referir à seguinte pergunta StackOverflow:
Como se trata de REST, apenas obter o método de solicitação do servidor não é suficiente. Você também precisa receber parâmetros de rota RESTful. O motivo para separar os parâmetros RESTful e os parâmetros GET / POST / PUT é que um recurso precisa ter sua própria URL exclusiva para identificação.
Aqui está uma maneira de implementar rotas RESTful no PHP usando o Slim:
O caso "DELETE" nunca será atingido porque não é possível REQUEST_METHOD. Os REQUEST_METHODs válidos são 'GET', 'HEAD', 'POST', 'PUT'. Leia a documentação (apontada em várias respostas nesta página) antes de postar uma resposta.
Patrick
1
@ Patrick, na verdade, o caso "DELETE" será atingido quando o método de solicitação for DELETE; no entanto, a documentação em PHP não a menciona. De fato, qualquer método é refletido $_SERVER['REQUEST_METHOD'], mesmo os personalizados. Lembre-se de que o método é apenas uma string no cabeçalho da solicitação e que é nossa tarefa verificar sua exatidão.
Ivan De Paz Centeno
1
O @Patrick DELETE está definido no RFC7231 e é suportado nos principais navegadores. tools.ietf.org/html/rfc7231#section-4.3.5 e $ _SERVER ["REQUEST_METHOD"] são apenas uma string.
Robert Talada 16/05/19
@IvanDePazCenteno Exatamente. Nunca confie na entrada do usuário. Nunca confie na entrada do usuário.
Você pode criar no controller $ request = $ this-> getRequest (). E então, $ request-> isPost (). Confira também $ request-> getMethod ().
Vasiliy Toporov 16/01
4
No php principal, você pode fazer assim:
<?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;}?>
É importante notar, adicionalmente, que o PHP preencherá todos os $_GET parâmetros, mesmo quando você enviar uma solicitação adequada de outro tipo.
Métodos em respostas acima são completamente correto, no entanto, se você quiser additionaly cheque de GETparâmetros durante o manuseio POST, DELETE, PUT, etc. pedido, é preciso verificar o tamanho da $_GETmatriz.
PATCH
?$_SERVER['REQUEST_METHOD'] === 'PATCH'
Respostas:
Usando
Exemplo
Para mais detalhes, consulte a documentação da variável $ _SERVER .
fonte
$_GET['var']
.$_POST
e$_GET
são um pouco infelizmente chamados.$_GET
contêm variáveis do componente de consulta da URL, independentemente do método HTTP.$_POST
conterá campos de formulário se a solicitação foi enviada comoapplication/x-www-form-urlencoded
.O REST em PHP pode ser feito de maneira bastante simples. Crie http://example.com/test.php (descrito abaixo). Use isso para chamadas REST, por exemplo, http://example.com/test.php/testing/123/hello . Isso funciona com o Apache e o Lighttpd imediatamente, e não são necessárias regras de reescrita.
fonte
@
na frente$_SERVER['PATH_INFO']
?PHP Notice: Undefined index: PATH_INFO
caso o PATH_INFO não esteja$_SERVER
. Estou adicionando isso ao meu pacote de truques imediatamente! É uma maneira de dizer "Eu sei que pode não haver uma entrada com esse nome nessa matriz, e estou pronto para isso, então cale a boca e faça o que eu mandar". :) Obrigado pessoal, por postar esta resposta e por chamar minha atenção para esse personagem em particular.<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
A detecção do método HTTP ou dos chamados
REQUEST METHOD
pode ser feita usando o seguinte snippet de código.Você também pode fazer isso usando a
switch
se preferir isso ao invés deif-else
declaração.Se um método diferente
GET
ouPOST
for necessário em um formulário HTML, isso geralmente é resolvido usando um campo oculto no formulário.Para obter mais informações sobre métodos HTTP, gostaria de me referir à seguinte pergunta StackOverflow:
PUT e DELETE do protocolo HTTP e seu uso em PHP
fonte
Também podemos usar o input_filter para detectar o método de solicitação, além de fornecer segurança através do saneamento de entrada.
fonte
Como se trata de REST, apenas obter o método de solicitação do servidor não é suficiente. Você também precisa receber parâmetros de rota RESTful. O motivo para separar os parâmetros RESTful e os parâmetros GET / POST / PUT é que um recurso precisa ter sua própria URL exclusiva para identificação.
Aqui está uma maneira de implementar rotas RESTful no PHP usando o Slim:
https://github.com/codeguy/Slim
E configure o servidor de acordo.
Aqui está outro exemplo usando o AltoRouter:
https://github.com/dannyvankooten/AltoRouter
fonte
Você pode usar a
getenv
função e não precisa trabalhar com uma$_SERVER
variável:Mais informações:
http://php.net/manual/en/function.getenv.php
fonte
Exemplo:
fonte
$_SERVER['REQUEST_METHOD']
, mesmo os personalizados. Lembre-se de que o método é apenas uma string no cabeçalho da solicitação e que é nossa tarefa verificar sua exatidão.Dessa forma, você também pode obter no zend framework 2 também. Obrigado.
fonte
No php principal, você pode fazer assim:
fonte
É importante notar, adicionalmente, que o PHP preencherá todos os
$_GET
parâmetros, mesmo quando você enviar uma solicitação adequada de outro tipo.Métodos em respostas acima são completamente correto, no entanto, se você quiser additionaly cheque de
GET
parâmetros durante o manuseioPOST
,DELETE
,PUT
, etc. pedido, é preciso verificar o tamanho da$_GET
matriz.fonte
Quando um método foi solicitado, ele terá um
array
. Então, basta verificar comcount()
.3v4l.org/U51TE
fonte
Eu usei esse código. Deveria funcionar.
Este código acima funcionará
REST calls
e também funcionará comhtml form
fonte
Você pode obter quaisquer dados da string de consulta, ou seja,
www.example.com?id=2&name=r
Você deve obter dados usando
$_GET['id']
ou$_REQUEST['id']
.Publicar dados significa como o formulário que
<form action='' method='POST'>
você deve usar$_POST
ou$_REQUEST
.fonte