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

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

796
demandé sur Peter Mortensen 2008-12-11 14:31:27

11 réponses

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

1126
répondu gnud 2016-08-22 13:39:38

reste en PHP peut être fait assez simple. Créer http://example.com/test.php (voir ci-après). Utilisez ceci pour les appels de repos, par exemple http://example.com/test.php/testing/123/hello . Cela fonctionne avec Apache et Lighttpd sorti de la boîte, 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;
}
206
répondu neu242 2018-02-18 15:46:18

détecter la méthode HTTP ou 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 déclaration if-else .

si une méthode autre que GET ou POST est requise sous forme html, cela 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 HTTP méthodes j'aimerais faire référence à la question suivante:

protocole HTTP mis et DELETE et leur utilisation en PHP

16
répondu Peter 2017-05-23 12:26:32

Puisqu'il s'agit du repos, il ne suffit pas d'obtenir la méthode de requête du serveur. Vous avez également besoin de recevoir des paramètres de route reposants. La raison pour séparer les paramètres RESTful et les paramètres GET/POST/PUT est qu'une ressource doit avoir sa propre URL unique pour l'identification.

Voici une façon d'implémenter les routes RESTful en 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 configurer 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');
7
répondu nurettin 2013-12-16 12:32:47

vous pouvez utiliser la fonction getenv et ne devez pas travailler avec une $_SERVER variable:

getenv('REQUEST_METHOD');

plus d'informations:

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

6
répondu Artegon 2016-03-04 12:35:33

nous pouvons également utiliser l'input_filter pour détecter la méthode de requête tout en fournissant la sécurité par l'assainissement des entrées.

$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
5
répondu HelpNeeder 2016-09-29 16:10:44

C'est Très Simple il suffit d'utiliser $_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;
}
?>
4
répondu Juned Ansari 2017-04-13 12:52:35
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();

de cette façon, vous pouvez également réaliser dans Zend framework 2. Grâce.

3
répondu Amit Patange 2015-07-06 11:11:18

dans le noyau php 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;
}


?>
0
répondu Shaan Ansari 2018-08-03 14:00:02

Lorsqu'une méthode a été demandée, elle aura un 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

-1
répondu Thielicious 2017-09-17 12:52:45

vous pouvez obtenir n'importe quelles données de chaîne de requête I. e www.example.com?id=2&name=r

vous devez obtenir des données en utilisant $_GET['id'] ou $_REQUEST['id'] .

Post data signifie Comme le formulaire <form action='' method='POST'> vous devez utiliser $_POST ou $_REQUEST .

-4
répondu Rockers Technology 2016-04-23 10:23:23