web-dev-qa-db-fra.com

Détecter le type de demande dans PHP (GET, POST, PUT ou DELETE)

Comment savoir quel type de requête a été utilisé (GET, POST, PUT ou DELETE) en PHP?

823
UnkwnTech

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 la documentation concernant la variable $ _SERVER .

1174
gnud

REST dans PHP peut être fait assez simplement. Créez http://example.com/test.php (décrit ci-dessous). Utilisez ceci pour les appels REST, par exemple. http://example.com/test.php/testing/123/hello . Cela fonctionne avec Apache et Lighttpd prêts à l'emploi, 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;
}
211
neu242

La détection de la méthode HTTP ou de ce que l'on appelle REQUEST METHOD peut être effectuée à l'aide de 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 ceci par rapport à l'instruction if-else.

Si une méthode autre que GET ou POST est requise dans un formulaire HTML, cela est souvent résolu en utilisant un champ masqué 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 souhaite faire référence à la question StackOverflow suivante:

Les protocoles PUT et DELETE du protocole HTTP et leur utilisation dans PHP

19
Peter

Comme il s'agit de REST, obtenir la méthode de requête du serveur ne suffit pas. Vous devez également recevoir les paramètres de route RESTful. La raison de la séparation des paramètres RESTful et des paramètres GET/POST/PUT est qu’une ressource doit disposer de sa propre URL unique pour son identification. 

Voici un moyen d'implémenter des routes RESTful dans PHP en utilisant Slim:

https://github.com/codeguy/Slim

$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
  echo "Hello, $name";
});
$app->run();

Et configurez le serveur en conséquence. 

Voici un autre exemple utilisant AltoRouter:

https://github.com/dannyvankooten/AltoRouter

$router = new AltoRouter();
$router->setBasePath('/AltoRouter'); // (optional) the subdir AltoRouter lives in

// mapping routes
$router->map('GET|POST','/', 'home#index', 'home');
$router->map('GET','/users', array('c' => 'UserController', 'a' => 'ListAction'));
$router->map('GET','/users/[i:id]', 'users#show', 'users_show');
$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do');
9
nurettin

Vous pouvez utiliser la fonction getenv sans devoir travailler avec une variable $_SERVER:

getenv('REQUEST_METHOD');

Plus d'informations:

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

8
Artegon

Nous pouvons également utiliser le fichier input_filter pour détecter la méthode de la requête tout en assurant la sécurité grâce au nettoyage des entrées.

$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
8
HelpNeeder

C'est très simple, utilisez $ _SERVER ['REQUEST_METHOD'];

Exemple:

<?php
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
  case 'GET':
    //Here Handle GET Request 
    break;
  case 'POST':
    //Here Handle POST Request 
    break;
  case 'DELETE':
    //Here Handle DELETE Request 
    break;
  case 'PUT':
    //Here Handle PUT Request 
    break;
}
?>
6
Juned Ansari
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();

De cette façon, vous pouvez également réaliser dans zend framework 2 aussi ..

5
Amit Patange

En php de base, vous pouvez faire comme ceci:

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


?>
2
Shaan Ansari

J'ai utilisé ce code. Ça devrait marcher.

function get_request_method() {
    $request_method = strtolower($_SERVER['REQUEST_METHOD']);

    if($request_method != 'get' && $request_method != 'post') {
        return $request_method;
    }

    if($request_method == 'post' && isset($_POST['_method'])) {
        return strtolower($_POST['_method']);
    }

    return $request_method;
}

Ce code ci-dessus fonctionnera avec REST calls et fonctionnera également avec html form

<form method="post">
    <input name="_method" type="hidden" value="delete" />
    <input type="submit" value="Submit">
</form>
0
mahfuz

Quand une méthode a été demandée, elle aura une array. Il suffit donc de vérifier avec count().

$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
    echo count($v)?
    $k.' was requested.':null;
}

3v4l.org/U51TE

0
Thielicious