Qual desses códigos será mais rápido?
$temp = $_REQUEST['s'];
ou
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Qual desses códigos será mais rápido?
$temp = $_REQUEST['s'];
ou
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Respostas:
$_REQUEST
, Por padrão, contém o conteúdo $_GET
, $_POST
e $_COOKIE
.
Mas é apenas um padrão, que depende variables_order
; e não tem certeza de que deseja trabalhar com cookies.
Se eu tivesse que escolher, provavelmente não usaria $_REQUEST
, e escolheria $_GET
ou $_POST
- dependendo do que meu aplicativo deveria fazer (ou seja, um ou outro, mas não ambos) : de um modo geral:
$_GET
quando alguém estiver solicitando dados do seu aplicativo.$_POST
quando alguém estiver enviando (inserindo ou atualizando; ou excluindo) dados no seu aplicativo.De qualquer forma, não haverá muita diferença nas performances: a diferença será insignificante, em comparação com o que o restante do seu script fará.
GET vs. POST
1) GET e POST criam uma matriz (por exemplo, matriz (chave => valor, chave2 => valor2, chave3 => valor3, ...)). Essa matriz contém pares de chave / valor, onde chaves são os nomes dos controles de formulário e valores são os dados de entrada do usuário.
2) GET e POST são tratados como $ _GET e $ _POST. São superglobais, o que significa que eles estão sempre acessíveis, independentemente do escopo - e você pode acessá-los de qualquer função, classe ou arquivo sem precisar fazer nada de especial.
3) $ _GET é uma matriz de variáveis passadas para o script atual através dos parâmetros de URL.
4) $ _POST é uma matriz de variáveis passadas para o script atual através do método HTTP POST.
Quando usar GET?
As informações enviadas de um formulário com o método GET são visíveis para todos (todos os nomes e valores de variáveis são exibidos no URL). O GET também tem limites na quantidade de informações a serem enviadas. A limitação é de cerca de 2000 caracteres. No entanto, como as variáveis são exibidas no URL, é possível marcar a página como favorita. Isso pode ser útil em alguns casos.
GET pode ser usado para enviar dados não sensíveis.
Nota: GET NUNCA deve ser usado para enviar senhas ou outras informações confidenciais!
Quando usar o POST?
As informações enviadas de um formulário com o método POST são invisíveis para outras pessoas (todos os nomes / valores são incorporados no corpo da solicitação HTTP) e não têm limites na quantidade de informações a serem enviadas.
Além disso, o POST suporta funcionalidades avançadas, como o suporte a entradas binárias de várias partes durante o upload de arquivos para o servidor.
No entanto, como as variáveis não são exibidas no URL, não é possível marcar a página como favorita.
$ _GET recupera variáveis da string de consulta ou do seu URL.>
$ _POST recupera variáveis de um método POST, como (geralmente) formulários.
$ _REQUEST é uma fusão de $ _GET e $ _POST, onde $ _POST substitui $ _GET. É bom usar $ _REQUEST em formulários auto-refrativos para validações.
GET
da sequência de consultas, POST
do envio do formulário).
Eu sugiro usar $_POST
e $_GET
explicitamente.
De qualquer forma, o uso de $ _REQUEST deve ser desnecessário com o design adequado do site, e ele vem com algumas desvantagens, como deixar você aberto a CSRF/XSS
ataques mais fáceis e outras bobagens resultantes do armazenamento de dados no URL.
A diferença de velocidade deve ser mínima de qualquer maneira.
Use PEDIDO. Ninguém se importa com a velocidade de uma operação tão simples, e é um código muito mais limpo.
$_REQUEST
é a conclusão errada. Veja minha resposta.
Não se preocupe. Mas você ainda deve usar a segunda solução (mais uma verificação extra para nenhuma dessas variáveis existentes), porque há problemas de segurança com $_REQUEST
(desde $_GET
e $_POST
não são as únicas fontes para essa matriz).
Houve um post sobre os problemas de $_REQUEST
ontem, acredito. Deixe-me ir encontrá-lo.
EDIT : Oh, bem, não diretamente um post, mas aqui está mesmo assim: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Use isso porque é mais seguro e não fará diferença de velocidade perceptível
$_REQUEST
mas ainda permite que o mesmo script seja acessado de qualquer maneira (no meu caso, o mesmo script é usado com diferentes 'ações' e, algumas vezes, $ _GET ficaria bem, mas outras vezes eu preciso de $ _POST para ocultar / proteger os dados).
Existem certas preocupações de segurança envolvidas, pois um hacker pode definir um cookie que substituirá um valor $ _POST ou $ _GET. Se você manipular dados confidenciais, eu não recomendaria o uso de $ _REQUEST. - Xandor
você não pode ser usado $_GET
alternativamente $_POST
em alguns casos.
Quando ??
GET
também tem limites na quantidade de informações a serem enviadas. A limitação é de cerca de 2000 caracteres.
Outra coisa é que existem poucos casos em que você não pode recuperar dados usando $_POST
Quando ?
For Rest Service
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
não há nada errado em usar $_REQUEST
.
Mas a maneira de fazer isso é verificar $ _SERVER ['REQUEST_METHOD'] explicitamente, não confiar que $ _POST esteja vazio para um GET.
$_SERVER['REQUEST_METHOD']
para verificar se o script será chamado com qualquer um deles. Mas dizer que nada está errado com isso $_REQUEST
não é 100% verdade. Existem certas preocupações de segurança envolvidas, pois um hacker pode definir um cookie que substituirá um valor $ _POST ou $ _GET. Se você manipular dados confidenciais, eu não recomendaria o uso $_REQUEST
.
$ _GET recupera variáveis da string de consulta ou do seu URL.>
$ _POST recupera variáveis de um método POST, como (geralmente) formulários.
$ _REQUEST é uma fusão de $ _GET e $ _POST, onde $ _POST substitui $ _GET. É bom usar $ _REQUEST em formulários auto-refrativos para validações.
request_order
e também pode conter valores de cookies, e é por isso que não é um recurso muito confiável nem útil.
Eu usaria o segundo método, pois é mais explícito. Caso contrário, você não sabe de onde vêm as variáveis.
Por que você precisa verificar tanto o GET quanto o POST? Certamente, usar um ou outro só faz mais sentido.
GET
sendo usado apenas para um item (por exemplo, movê-lo) e POST
para vários deles (um formulário com caixas de seleção ...).
Eu só uso _GET ou _POST. Eu prefiro ter controle.
O que eu não gosto nos fragmentos de código no OP é que eles descartam as informações nas quais o método HTTP foi usado. E essas informações são importantes para a higienização das entradas.
Por exemplo, se um script aceitar dados de um formulário que será inserido no banco de dados, é melhor usar o POST ( use GET apenas para ações idempotentes ). Mas se o script receber os dados de entrada por meio do método GET, deverá (normalmente) ser rejeitado. Para mim, tal situação pode justificar a gravação de uma violação de segurança no log de erros, pois é um sinal de que alguém está tentando algo.
Com qualquer fragmento de código no OP, essa higienização não seria possível.
$_POST
é impedir motor de pesquisa indexadores de fazer algo parecido com isto: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Eu usaria $_POST
, e $_GET
porque diferentemente de $_REQUEST
seu conteúdo não é influenciado por variables_order
.
Quando usar $_POST
e $_GET
depende de que tipo de operação está sendo executada. Uma operação que altera os dados manipulados do servidor deve ser feita através de uma solicitação POST, enquanto as outras operações devem ser feitas através de uma solicitação GET. Para dar um exemplo, uma operação que exclua uma conta de usuário não deve ser executada diretamente após o usuário clicar em um link, enquanto a visualização de uma imagem pode ser feita através de um link.
Eu uso isso,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
a instrução valida se $ _REQUEST possui mais de um parâmetro (o primeiro parâmetro em $ _REQUEST será o URL da solicitação que pode ser usado quando necessário, alguns pacotes PHP não retornarão $ _GET, portanto verifique se mais de 1 vale para $ _GET, por padrão, será $ _POST.
Você está otimizando prematuramente. Além disso, você deve realmente pensar se o GET deve ser usado para as coisas que você está postando, por razões de segurança.
É feio e eu não o recomendaria como uma solução final ao colocar o código ao vivo, mas, ao criar funções de descanso, às vezes é útil ter um captador de parâmetros 'catch-all':
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;
}
Alguém criativo provavelmente poderia até adicionar a ele para lidar com os parâmetros da linha de comando ou o que vier do seu IDE. Depois de decidir o que uma determinada função de descanso está fazendo, você pode escolher uma apropriada para essa chamada para garantir que você obtenha o que precisa para a versão de implantação. Isso pressupõe que 'REQUEST_METHOD' está definido.
!isset($_REQUEST['s'])
.