Lequel de ces codes sera le plus rapide?
$temp = $_REQUEST['s'];
ou
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Lequel de ces codes sera le plus rapide?
$temp = $_REQUEST['s'];
ou
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Réponses:
$_REQUEST
, par défaut, contient le contenu de $_GET
, $_POST
et $_COOKIE
.
Mais ce n'est qu'un défaut, qui dépend de variables_order
; et pas sûr de vouloir travailler avec les cookies.
Si je devais choisir, je n'utiliserais probablement pas $_REQUEST
, et je choisirais $_GET
ou $_POST
- en fonction de ce que mon application doit faire (c'est-à-dire l'un ou l'autre, mais pas les deux) : de manière générale:
$_GET
lorsque quelqu'un demande des données à votre application.$_POST
lorsque quelqu'un pousse (insère ou met à jour ou supprime) des données dans votre application.Dans tous les cas, il n'y aura pas beaucoup de différence sur les performances: la différence sera négligeable par rapport à ce que fera le reste de votre script.
GET vs POST
1) GET et POST créent tous deux un tableau (par exemple, tableau (clé => valeur, clé2 => valeur2, clé3 => valeur3, ...)). Ce tableau contient des paires clé / valeur, où les clés sont les noms des contrôles de formulaire et les valeurs sont les données d'entrée de l'utilisateur.
2) GET et POST sont traités comme $ _GET et $ _POST. Ce sont des superglobales, ce qui signifie qu'elles sont toujours accessibles, quelle que soit leur portée - et vous pouvez y accéder à partir de n'importe quelle fonction, classe ou fichier sans rien faire de spécial.
3) $ _GET est un tableau de variables passées au script courant via les paramètres URL.
4) $ _POST est un tableau de variables passées au script courant via la méthode HTTP POST.
Quand utiliser GET?
Les informations envoyées depuis un formulaire avec la méthode GET sont visibles par tous (tous les noms et valeurs de variable sont affichés dans l'URL). GET a également des limites sur la quantité d'informations à envoyer. La limitation est d'environ 2000 caractères. Cependant, comme les variables sont affichées dans l'URL, il est possible de mettre la page en signet. Cela peut être utile dans certains cas.
GET peut être utilisé pour envoyer des données non sensibles.
Remarque: GET ne doit JAMAIS être utilisé pour envoyer des mots de passe ou d'autres informations sensibles!
Quand utiliser POST?
Les informations envoyées depuis un formulaire avec la méthode POST sont invisibles pour les autres (tous les noms / valeurs sont incorporés dans le corps de la requête HTTP) et n'ont aucune limite sur la quantité d'informations à envoyer.
De plus, POST prend en charge des fonctionnalités avancées telles que la prise en charge de l'entrée binaire en plusieurs parties lors du téléchargement de fichiers sur le serveur.
Cependant, comme les variables ne sont pas affichées dans l'URL, il n'est pas possible de mettre la page en signet.
$ _GET récupère les variables de la chaîne de requête ou de votre URL.>
$ _POST récupère les variables d'une méthode POST, comme (généralement) les formulaires.
$ _REQUEST est une fusion de $ _GET et $ _POST où $ _POST remplace $ _GET. Bon à utiliser $ _REQUEST sur les formulaires d'auto-référence pour les validations.
GET
partir de la chaîne de requête, POST
de la soumission du formulaire).
Je suggère d'utiliser $_POST
et $_GET
explicitement.
L'utilisation de $ _REQUEST devrait de toute façon être inutile avec une conception de site appropriée, et elle présente certains inconvénients, comme vous laisser ouvert à des CSRF/XSS
attaques plus faciles et à d'autres bêtises résultant du stockage de données dans l'URL.
La différence de vitesse doit être minimale dans les deux cas.
Utilisez REQUEST. Personne ne se soucie de la vitesse d'une opération aussi simple, et c'est un code beaucoup plus propre.
$_REQUEST
est la mauvaise conclusion. Voyez ma réponse.
Ne t'inquiète pas. Mais vous devez toujours utiliser la deuxième solution (plus une vérification supplémentaire pour aucune de ces variables existantes), car il y a des problèmes de sécurité avec $_REQUEST
(puisque $_GET
et $_POST
ne sont pas les seules sources pour ce tableau).
Il y avait un article sur les problèmes d' $_REQUEST
hier, je crois. Laisse-moi aller le trouver.
EDIT : Eh bien, pas directement un post, mais le voici quand même: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Utilisez-le car il est plus sûr et ne fera pas de différence de vitesse notable
$_REQUEST
mais permet toujours d'accéder au même script dans les deux sens (dans mon cas, le même script est utilisé avec différentes `` actions '' et parfois $ _GET conviendrait, mais d'autres fois j'ai besoin de $ _POST pour cacher / sécuriser les données).
Il existe certains problèmes de sécurité, car un pirate informatique peut définir un cookie qui remplacera une valeur $ _POST ou $ _GET. Si vous gérez des données sensibles, je ne recommanderais pas d'utiliser $ _REQUEST. - Xandor
tu ne peux pas être utilisé $_GET
alternative $_POST
sur certains cas.
Quand ??
GET
a également des limites sur la quantité d'informations à envoyer. La limitation est d'environ 2000 caractères.
Autre chose, il y a peu de cas où vous ne pouvez pas récupérer des données en utilisant $_POST
Quand ?
Pour le service de repos
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
il n'y a rien de mal à utiliser $_REQUEST
.
Mais la façon de faire est de vérifier explicitement $ _SERVER ['REQUEST_METHOD'], et non de se fier au fait que $ _POST est vide pour un GET.
$_SERVER['REQUEST_METHOD']
pour vérifier si le script sera appelé avec l'un ou l'autre. Mais dire que rien ne va $_REQUEST
pas n'est pas vrai à 100%. Il existe certains problèmes de sécurité, car un pirate informatique peut définir un cookie qui remplacera une valeur $ _POST ou $ _GET. Si vous gérez des données sensibles, je ne recommanderais pas d'utiliser $_REQUEST
.
$ _GET récupère les variables de la chaîne de requête ou de votre URL.>
$ _POST récupère les variables d'une méthode POST, comme (généralement) les formulaires.
$ _REQUEST est une fusion de $ _GET et $ _POST où $ _POST remplace $ _GET. Bon à utiliser $ _REQUEST sur les formulaires d'auto-référence pour les validations.
request_order
et peut également contenir des valeurs de cookie, c'est pourquoi ce n'est pas une fonctionnalité très fiable ni utile.
J'utiliserais la deuxième méthode car elle est plus explicite. Sinon, vous ne savez pas d'où viennent les variables.
Pourquoi avez-vous quand même besoin de vérifier à la fois GET et POST? Utiliser l'un ou l'autre n'a sûrement plus de sens.
GET
étant utilisé pour un seul élément (par exemple le déplacer) et POST
pour plusieurs d'entre eux (un formulaire avec des cases à cocher ...).
Je n'utilise que _GET ou _POST. Je préfère avoir le contrôle.
Ce que je n'aime pas dans l'un ou l'autre des fragments de code dans l'OP, c'est qu'ils ignorent les informations sur la méthode HTTP utilisée. Et cette information est importante pour la désinfection des entrées.
Par exemple, si un script accepte des données d'un formulaire qui va être entré dans la base de données, le formulaire a intérêt à utiliser POST ( utilisez GET uniquement pour les actions idempotentes ). Mais si le script reçoit les données d'entrée via la méthode GET, il devrait (normalement) être rejeté. Pour moi, une telle situation pourrait justifier l'écriture d'une violation de sécurité dans le journal des erreurs, car c'est un signe que quelqu'un essaie quelque chose.
Avec l'un ou l'autre des fragments de code dans l'OP, cette désinfection ne serait pas possible.
$_POST
est d'empêcher les robots des moteurs de recherche de faire quelque chose comme ceci: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Je voudrais utiliser $_POST
, et $_GET
parce que différemment de $_REQUEST
leur contenu n'est pas influencé par variables_order
.
Quand l'utiliser $_POST
et $_GET
dépend du type d'opération en cours d'exécution. Une opération qui modifie les données traitées à partir du serveur doit être effectuée via une requête POST, tandis que les autres opérations doivent être effectuées via une requête GET. Pour faire un exemple, une opération qui supprime un compte utilisateur ne doit pas être exécutée directement après que l'utilisateur a cliqué sur un lien, alors que la visualisation d'une image peut être effectuée via un lien.
Je l'utilise,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
l'instruction valide si $ _REQUEST a plus d'un paramètre (le premier paramètre de $ _REQUEST sera l'URI de la requête qui peut être utilisé en cas de besoin, certains packages PHP ne retourneront pas $ _GET alors vérifiez si c'est plus de 1 aller pour $ _GET, par par défaut, ce sera $ _POST.
Vous optimisez prématurément. En outre, vous devriez vraiment réfléchir à la question de savoir si GET doit être utilisé pour ce que vous POST-ing, pour des raisons de sécurité.
C'est moche et je ne le recommanderais pas comme solution finale lors de la transmission du code en direct, mais lors de la création de fonctions de repos, il est parfois pratique d'avoir un capteur de paramètres `` fourre-tout '':
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;
}
Quelqu'un de création pourrait probablement même y ajouter pour gérer les paramètres de ligne de commande ou tout ce qui provient de votre IDE. Une fois que vous avez décidé de ce que fait une fonction de repos donnée, vous pouvez en choisir une appropriée pour cet appel donné pour vous assurer d'obtenir ce dont vous avez besoin pour la version de déploiement. Cela suppose que «REQUEST_METHOD» est défini.
!isset($_REQUEST['s'])
.