Wie kann ich feststellen, welcher Anforderungstyp in PHP verwendet wurde (GET, POST, PUT oder DELETE)?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
Wie kann ich feststellen, welcher Anforderungstyp in PHP verwendet wurde (GET, POST, PUT oder DELETE)?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
Antworten:
Durch die Nutzung
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Weitere Informationen finden Sie in der Dokumentation zur Variablen $ _SERVER .
$_GET['var']
.
$_POST
und $_GET
sind leider etwas benannt. $_GET
Enthält Variablen aus der Abfragekomponente der URL, unabhängig von der HTTP-Methode. $_POST
enthält Formularfelder, wenn die Anfrage als gesendet wurde application/x-www-form-urlencoded
.
REST in PHP kann ziemlich einfach durchgeführt werden. Erstellen Sie http://example.com/test.php (siehe unten). Verwenden Sie diese Option für REST-Aufrufe, z . B. http://example.com/test.php/testing/123/hello . Dies funktioniert sofort mit Apache und Lighttpd, und es sind keine Umschreiberegeln erforderlich.
<?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;
}
@
vor $_SERVER['PATH_INFO']
?
PHP Notice: Undefined index: PATH_INFO
falls PATH_INFO nicht vorhanden ist $_SERVER
. Ich füge das sofort meiner Trickkiste hinzu! Es ist eine Art zu sagen: "Ich weiß, dass es in diesem Array möglicherweise keinen so benannten Eintrag gibt, und ich bin bereit dafür. Halten Sie einfach die Klappe und tun Sie, was ich Ihnen sage." :) Danke Jungs, sowohl für das Posten dieser Antwort als auch dafür, dass ich meine Aufmerksamkeit auf diesen bestimmten Charakter darin gelenkt habe.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
Das Erkennen der HTTP-Methode oder der so genannten HTTP-Methode REQUEST METHOD
kann mithilfe des folgenden Codeausschnitts erfolgen.
$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
}
Sie können dies auch mit a tun, switch
wenn Sie dies der if-else
Anweisung vorziehen .
Wenn eine andere Methode als GET
oder POST
in einem HTML-Formular erforderlich ist, wird dies häufig mithilfe eines ausgeblendeten Felds im Formular gelöst.
<!-- 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>
Weitere Informationen zu HTTP-Methoden finden Sie in der folgenden StackOverflow-Frage:
PUT und DELETE des HTTP-Protokolls und ihre Verwendung in PHP
Wir können auch den input_filter verwenden , um die Anforderungsmethode zu erkennen und gleichzeitig Sicherheit durch Eingabesanierung zu gewährleisten.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Da es sich um REST handelt, reicht es nicht aus, nur die Anforderungsmethode vom Server abzurufen. Sie müssen auch RESTful-Routenparameter erhalten. Der Grund für die Trennung von RESTful-Parametern und GET / POST / PUT-Parametern besteht darin, dass eine Ressource zur Identifizierung eine eigene eindeutige URL haben muss.
Hier ist eine Möglichkeit, RESTful-Routen in PHP mit Slim zu implementieren:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Und konfigurieren Sie den Server entsprechend.
Hier ist ein weiteres Beispiel mit 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');
Sie können die getenv
Funktion verwenden und müssen nicht mit einer $_SERVER
Variablen arbeiten:
getenv('REQUEST_METHOD');
Mehr Info:
Es ist sehr einfach, benutze einfach $ _SERVER ['REQUEST_METHOD'];
Beispiel:
<?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;
}
?>
$_SERVER['REQUEST_METHOD']
selbst angepassten wider . Denken Sie daran, dass die Methode nur eine Zeichenfolge im Anforderungsheader ist und dass es unsere Aufgabe ist, die Richtigkeit zu überprüfen.
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
Auf diese Weise können Sie auch in Zend Framework 2 erreichen. Vielen Dank.
In Core PHP können Sie Folgendes tun:
<?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;
}
?>
Es ist außerdem wichtig zu beachten, dass PHP alle $_GET
Parameter auffüllt, auch wenn Sie eine ordnungsgemäße Anfrage eines anderen Typs senden.
Methods in oben Antworten sind völlig richtig, aber wenn Sie zu Additionaly überprüfen möchten GET
Parameter bei der Handhabung POST
, DELETE
, PUT
etc. Anfrage, müssen Sie die Größe überprüfen $_GET
Array.
Wenn eine Methode angefordert wurde, hat sie eine array
. Also einfach mal reinschauen count()
.
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
Ich habe diesen Code verwendet. Es sollte funktionieren.
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;
}
Dieser obige Code funktioniert mit REST calls
und auch mithtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Sie können beliebige Abfragezeichenfolgendaten abrufen, z www.example.com?id=2&name=r
Sie müssen Daten mit $_GET['id']
oder abrufen $_REQUEST['id']
.
Daten posten bedeutet wie Formular, das <form action='' method='POST'>
Sie verwenden müssen $_POST
oder $_REQUEST
.