Comment puis-je détecter le type de requête utilisé (GET, POST, PUT ou DELETE) en PHP ?
Que se passe-t-il si vous POST à mypage.php?var=quelque chose ?
Comment puis-je détecter le type de requête utilisé (GET, POST, PUT ou DELETE) en PHP ?
En utilisant
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Pour plus de détails, veuillez consulter le documentation pour la variable $_SERVER .
La méthode sera POST, mais si vous devez utiliser $_GET pour obtenir ces variables, je ne suis pas sûr.
Dans le cas que nickf mentionne, vous pourriez aussi (peut-être) utiliser la variable $_REQUEST. $_REQUEST contient les valeurs post, get, et cookie. Lisez la documentation à php.net/manual/fr/reserved.variables.request.php
REST en PHP peut être fait assez simplement. Créez http://example.com/test.php (décrites ci-dessous). Utilisez ceci pour les appels REST, par exemple http://example.com/test.php/testing/123/hello . Ce système fonctionne d'emblée avec Apache et Lighttpd, et aucune règle de réécriture n'est nécessaire.
<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method) {
case 'PUT':
do_something_with_put($request);
break;
case 'POST':
do_something_with_post($request);
break;
case 'GET':
do_something_with_get($request);
break;
default:
handle_error($request);
break;
}
Si vous voulez que votre API soit disponible, sans citer le moteur d'interprétation que vous utilisez, ajoutez un fichier .htaccess contenant RewriteEngine on RewriteRule ^api/(.*)$ api.php/$1 Cela suppose que votre fichier API s'appelle api.php. De plus, depuis que le bloc de code ci-dessus a été écrit, les développeurs PHP ont déprécié la fonction split. Il fonctionne bien si vous remplacez split par explode.
@Svish, quel beau détail vous avez remarqué ! Il se débarrasse de PHP Notice: Undefined index: PATH_INFO
dans le cas où PATH_INFO n'est pas dans $_SERVER
. Je l'ajoute tout de suite à ma panoplie ! C'est une façon de dire "Je sais qu'il n'y aura peut-être pas d'entrée nommée de cette façon dans ce tableau, et j'y suis prêt, alors fermez-la et faites ce que je vous dis" :). Merci les gars, à la fois pour avoir posté cette réponse et pour avoir attiré mon attention sur ce caractère particulier.
Détecter la méthode HTTP ou ce que l'on appelle REQUEST METHOD
peut être fait en utilisant l'extrait de code suivant.
$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
}
Vous pouvez également le faire en utilisant un switch
si vous préférez cela à la if-else
déclaration.
Si une méthode autre que GET
o POST
est nécessaire dans un formulaire HTML, ce problème est souvent résolu en utilisant un champ caché dans le formulaire.
<!-- DELETE method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="DELETE">
</form>
<!-- PUT method -->
<form action='' method='POST'>
<input type="hidden" name'_METHOD' value="PUT">
</form>
Pour plus d'informations sur les méthodes HTTP, je vous renvoie à la question suivante de StackOverflow :
Nous pouvons également utiliser le filtre d'entrée pour détecter la méthode de demande tout en assurant la sécurité par l'assainissement des entrées.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
27 votes
N'oubliez pas HEAD =) (ainsi que OPTIONS, TRACE et CONNECT, mais je ne pense pas que PHP les reçoive jamais).
5 votes
Et si
PATCH
?2 votes
PATCH fonctionne également très bien.
$_SERVER['REQUEST_METHOD'] === 'PATCH'