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?
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 .
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;
}
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:
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');
vous pouvez utiliser la fonction getenv
et ne devez pas travailler avec une $_SERVER
variable:
getenv('REQUEST_METHOD');
plus d'informations:
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);
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;
}
?>
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
de cette façon, vous pouvez également réaliser dans Zend framework 2. Grâce.
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;
}
?>
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;
}
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
.