+1 dazu - im Zweifelsfall liegt var_dump ($ _ SERVER) und die Antwort oft darin.
Paul Dixon
10
Was passiert, wenn Sie auf mypage.php posten? Var = etwas?
Nickf
2
Die Methode ist POST, aber wenn Sie $ _GET verwenden müssen, um diese Variablen zu erhalten, bin ich mir nicht sicher.
OIS
24
@ NathanLong Nach meiner Erfahrung ist das falsch. Wenn Sie auf mypage.php? Var = etwas posten, ist 'etwas' in $_GET['var'].
David Gallagher
14
$_POSTund $_GETsind leider etwas benannt. $_GETEnthält Variablen aus der Abfragekomponente der URL, unabhängig von der HTTP-Methode. $_POSTenthält Formularfelder, wenn die Anfrage als gesendet wurde application/x-www-form-urlencoded.
Pj Dietz
223
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.
Wenn Sie möchten, dass Ihre API verfügbar ist, ohne anzugeben, welche Interpretations-Engine Sie verwenden, fügen Sie eine .htaccess-Datei mit RewriteEngine auf RewriteRule ^ api /(.*)$ api.php / $ 1 hinzu. Dies setzt voraus, dass Ihre API-Datei api heißt. php. Da der obige Codeblock geschrieben wurde, haben die PHP-Entwickler die Split-Funktion abgeschrieben. Es funktioniert gut, wenn Sie Split durch Explode ersetzen.
JonTheNiceGuy
10
Was ist mit dem @vor $_SERVER['PATH_INFO']?
Svish
10
@Svish, was für ein tolles Detail du bemerkt hast! Es wird entfernt, PHP Notice: Undefined index: PATH_INFOfalls 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.
Inkredibl
16
Normalerweise benutze ich ein! Leer anstelle von @. Besser üben?
Das Erkennen der HTTP-Methode oder der so genannten HTTP-Methode REQUEST METHODkann 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, switchwenn Sie dies der if-elseAnweisung vorziehen .
Wenn eine andere Methode als GEToder POSTin einem HTML-Formular erforderlich ist, wird dies häufig mithilfe eines ausgeblendeten Felds im Formular gelöst.
<!-- DELETE method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="DELETE"></form><!-- PUT method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="PUT"></form>
Weitere Informationen zu HTTP-Methoden finden Sie in der folgenden StackOverflow-Frage:
Wir können auch den input_filter verwenden , um die Anforderungsmethode zu erkennen und gleichzeitig Sicherheit durch Eingabesanierung zu gewährleisten.
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:
Der Fall "DELETE" wird niemals getroffen, da dies keine mögliche REQUEST_METHOD ist. Die gültigen REQUEST_METHODs sind 'GET', 'HEAD', 'POST', 'PUT'. Lesen Sie die Dokumentation (auf die in zahlreichen Antworten auf dieser Seite verwiesen wird), bevor Sie eine Antwort veröffentlichen.
Patrick
1
@Patrick, tatsächlich wird der Fall "DELETE" getroffen, wenn die Anforderungsmethode DELETE ist. Die Dokumentation in PHP erwähnt dies jedoch nicht. In der Tat spiegelt sich jede Methode in $_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.
Ivan De Paz Centeno
1
@Patrick DELETE ist in RFC7231 definiert und wird in allen gängigen Browsern unterstützt. tools.ietf.org/html/rfc7231#section-4.3.5 und $ _SERVER ["REQUEST_METHOD"] sind nur Zeichenfolgen.
Sie können im Controller $ request = $ this-> getRequest () erstellen. Und dann $ request-> isPost (). Schauen Sie sich auch $ request-> getMethod () an.
Vasiliy Toporov
4
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 $_GETParameter 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 GETParameter bei der Handhabung POST, DELETE, PUTetc. Anfrage, müssen Sie die Größe überprüfen $_GETArray.
PATCH
?$_SERVER['REQUEST_METHOD'] === 'PATCH'
Antworten:
Durch die Nutzung
Beispiel
Weitere Informationen finden Sie in der Dokumentation zur Variablen $ _SERVER .
quelle
$_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 wurdeapplication/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.
quelle
@
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.Sie können dies auch mit a tun,
switch
wenn Sie dies derif-else
Anweisung vorziehen .Wenn eine andere Methode als
GET
oderPOST
in einem HTML-Formular erforderlich ist, wird dies häufig mithilfe eines ausgeblendeten Felds im Formular gelöst.Weitere Informationen zu HTTP-Methoden finden Sie in der folgenden StackOverflow-Frage:
PUT und DELETE des HTTP-Protokolls und ihre Verwendung in PHP
quelle
Wir können auch den input_filter verwenden , um die Anforderungsmethode zu erkennen und gleichzeitig Sicherheit durch Eingabesanierung zu gewährleisten.
quelle
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
Und konfigurieren Sie den Server entsprechend.
Hier ist ein weiteres Beispiel mit AltoRouter:
https://github.com/dannyvankooten/AltoRouter
quelle
Sie können die
getenv
Funktion verwenden und müssen nicht mit einer$_SERVER
Variablen arbeiten:Mehr Info:
http://php.net/manual/en/function.getenv.php
quelle
Beispiel:
quelle
$_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.Auf diese Weise können Sie auch in Zend Framework 2 erreichen. Vielen Dank.
quelle
In Core PHP können Sie Folgendes tun:
quelle
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 HandhabungPOST
,DELETE
,PUT
etc. Anfrage, müssen Sie die Größe überprüfen$_GET
Array.quelle
Wenn eine Methode angefordert wurde, hat sie eine
array
. Also einfach mal reinschauencount()
.3v4l.org/U51TE
quelle
Ich habe diesen Code verwendet. Es sollte funktionieren.
Dieser obige Code funktioniert mit
REST calls
und auch mithtml form
quelle
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
.quelle