1074 votes

Détecter le type de requête en PHP (GET, POST, PUT ou DELETE)

Comment puis-je détecter le type de requête utilisé (GET, POST, PUT ou DELETE) en PHP ?

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'

1512voto

gnud Points 26854

En utilisant

$_SERVER['REQUEST_METHOD']

Exemple

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 .

12 votes

Que se passe-t-il si vous POST à mypage.php?var=quelque chose ?

4 votes

La méthode sera POST, mais si vous devez utiliser $_GET pour obtenir ces variables, je ne suis pas sûr.

2 votes

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

244voto

neu242 Points 4538

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;
}

21 votes

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.

11 votes

C'est quoi cette @ devant $_SERVER['PATH_INFO'] ?

10 votes

@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.

31voto

Peter Points 1994

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 :

PUT et DELETE du protocole HTTP et leur utilisation en PHP

15voto

Artegon Points 1171

Vous pouvez utiliser getenv et ne doivent pas travailler avec une fonction $_SERVER variable :

getenv('REQUEST_METHOD');

Plus d'informations :

http://php.net/manual/en/function.getenv.php

0 votes

C'est la seule méthode qui a fonctionné pour moi. La variable $_SERVER["REQUEST_METHOD"] n'a détecté que les méthodes POST et GET, pour le reste elle a renvoyé false.

14voto

HelpNeeder Points 3069

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.com

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.

Powered by:

X