+1 à cela - en cas de doute, var_dump ($ _ SERVER) et la réponse se trouve souvent à l'intérieur.
Paul Dixon
10
Que se passe-t-il si vous POSTEZ sur mypage.php? Var = quelque chose?
nickf
2
La méthode sera POST, mais si vous devez utiliser $ _GET pour obtenir ces variables, je ne suis pas sûr.
OIS
24
@NathanLong D'après mon expérience, c'est incorrect. Si vous POSTEZ sur mypage.php? Var = quelque chose, alors "quelque chose" sera dans $_GET['var'].
David Gallagher
14
$_POSTet $_GETsont un peu malheureusement nommés. $_GETcontiennent des variables du composant de requête de l'URL, quelle que soit la méthode HTTP. $_POSTcontiendra des champs de formulaire si la demande a été envoyée en tant que application/x-www-form-urlencoded.
Pj Dietz
223
REST en PHP peut être fait assez simplement. Créez http://example.com/test.php (décrit ci-dessous). Utilisez-le 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.
Si vous souhaitez que votre API soit disponible, sans citer le moteur d'interprétation que vous utilisez, ajoutez un fichier .htaccess contenant RewriteEngine sur RewriteRule ^ api /(.*)$ api.php / $ 1 Cela suppose que votre fichier API est appelé api. php. De plus, depuis que le bloc de code ci-dessus a été écrit, les développeurs PHP ont déprécié la fonction de partage. cela fonctionne très bien si vous remplacez split par exploser.
JonTheNiceGuy
10
Qu'est-ce qui se passe @devant $_SERVER['PATH_INFO']?
Svish
10
@Svish, quel grand détail vous avez remarqué! Il s'en débarrasse PHP Notice: Undefined index: PATH_INFOau cas où PATH_INFO ne serait pas dedans $_SERVER. J'ajoute ça à mon sac d'astuces tout de suite! C'est une façon de dire "Je sais qu'il n'y a peut-être pas d'entrée nommée de cette façon dans ce tableau, et je suis prêt pour cela, alors tais-toi et fais ce que je te dis". :) Merci les gars, à la fois pour avoir posté cette réponse et pour avoir attiré mon attention sur ce personnage en particulier.
inkredibl
16
J'utilise généralement un! Empty au lieu de @. Une meilleure pratique?
geilt
8
De manière plus concise en utilisant des méthodes variables: <?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
SandWyrm
21
La détection de la méthode HTTP ou de ce que l'on appelle REQUEST METHODpeut ê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 switchsi vous préférezif-else instruction.
Si une méthode autre que GETou POSTest requise dans un formulaire HTML, cela est souvent résolu en utilisant un champ masqué dans le formulaire.
<!-- DELETE method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="DELETE"></form><!-- PUT method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="PUT"></form>
Pour plus d'informations sur les méthodes HTTP, je voudrais me référer à la question StackOverflow suivante:
Nous pouvons également utiliser le fichier input_filter pour détecter la méthode de demande tout en assurant la sécurité via l'assainissement des entrées.
Comme il s'agit de REST, il ne suffit pas d'obtenir la méthode de demande du serveur. 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 avoir sa propre URL unique pour l'identification.
Voici une façon d'implémenter des routes RESTful en PHP à l'aide de Slim:
Le cas "DELETE" ne sera jamais atteint car ce n'est pas un REQUEST_METHOD possible. Les REQUEST_METHOD valides sont 'GET', 'HEAD', 'POST', 'PUT'. Lisez la documentation (indiquée dans de nombreuses réponses sur cette même page) avant de poster une réponse.
Patrick
1
@Patrick, en fait, le cas "DELETE" obtiendra un hit lorsque la méthode de demande est DELETE; néanmoins la documentation en PHP ne le mentionne pas. En effet, toute méthode se reflète dans $_SERVER['REQUEST_METHOD'], même les personnalisées. N'oubliez pas que la méthode n'est qu'une chaîne dans l'en-tête de la demande et qu'il nous appartient de vérifier son exactitude.
Ivan De Paz Centeno
1
@Patrick DELETE est défini dans la RFC7231 et est pris en charge dans tous les principaux navigateurs. tools.ietf.org/html/rfc7231#section-4.3.5 et $ _SERVER ["REQUEST_METHOD"] n'est qu'une chaîne.
Robert Talada
@IvanDePazCenteno Exactement. Ne faites jamais confiance à l'entrée utilisateur. Ne faites jamais confiance à l'entrée utilisateur.
Vous pouvez faire dans le contrôleur $ request = $ this-> getRequest (). Et puis, $ request-> isPost (). Consultez également $ request-> getMethod ().
Vasiliy Toporov
4
En core 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;}?>
Il est également important de noter que PHP remplira tous les $_GET paramètres même lorsque vous envoyez une demande appropriée d'un autre type.
Les méthodes dans les réponses ci - dessus sont tout à fait correct, mais si vous voulez additionaly vérifier des GETparamètres lors de la manipulation POST, DELETE, PUT, etc. demande, vous devez vérifier la taille du $_GETtableau.
PATCH
?$_SERVER['REQUEST_METHOD'] === 'PATCH'
Réponses:
En utilisant
Exemple
Pour plus de détails, consultez la documentation de la variable $ _SERVER .
la source
$_GET['var']
.$_POST
et$_GET
sont un peu malheureusement nommés.$_GET
contiennent des variables du composant de requête de l'URL, quelle que soit la méthode HTTP.$_POST
contiendra des champs de formulaire si la demande a été envoyée en tant queapplication/x-www-form-urlencoded
.REST en PHP peut être fait assez simplement. Créez http://example.com/test.php (décrit ci-dessous). Utilisez-le 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.
la source
@
devant$_SERVER['PATH_INFO']
?PHP Notice: Undefined index: PATH_INFO
au cas où PATH_INFO ne serait pas dedans$_SERVER
. J'ajoute ça à mon sac d'astuces tout de suite! C'est une façon de dire "Je sais qu'il n'y a peut-être pas d'entrée nommée de cette façon dans ce tableau, et je suis prêt pour cela, alors tais-toi et fais ce que je te dis". :) Merci les gars, à la fois pour avoir posté cette réponse et pour avoir attiré mon attention sur ce personnage en particulier.<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
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.Vous pouvez également le faire en utilisant un
switch
si vous préférezif-else
instruction.Si une méthode autre que
GET
ouPOST
est requise dans un formulaire HTML, cela est souvent résolu en utilisant un champ masqué dans le formulaire.Pour plus d'informations sur les méthodes HTTP, je voudrais me référer à la question StackOverflow suivante:
PUT et DELETE du protocole HTTP et leur utilisation en PHP
la source
Nous pouvons également utiliser le fichier input_filter pour détecter la méthode de demande tout en assurant la sécurité via l'assainissement des entrées.
la source
Comme il s'agit de REST, il ne suffit pas d'obtenir la méthode de demande du serveur. 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 avoir sa propre URL unique pour l'identification.
Voici une façon d'implémenter des routes RESTful en PHP à l'aide de Slim:
https://github.com/codeguy/Slim
Et configurez le serveur en conséquence.
Voici un autre exemple d'utilisation d'AltoRouter:
https://github.com/dannyvankooten/AltoRouter
la source
Vous pouvez utiliser la
getenv
fonction et ne pas avoir à travailler avec une$_SERVER
variable:Plus d'informations:
http://php.net/manual/en/function.getenv.php
la source
Exemple:
la source
$_SERVER['REQUEST_METHOD']
, même les personnalisées. N'oubliez pas que la méthode n'est qu'une chaîne dans l'en-tête de la demande et qu'il nous appartient de vérifier son exactitude.De cette façon, vous pouvez également réaliser dans zend framework 2 également. Merci.
la source
En core php, vous pouvez faire comme ceci:
la source
Il est également important de noter que PHP remplira tous les
$_GET
paramètres même lorsque vous envoyez une demande appropriée d'un autre type.Les méthodes dans les réponses ci - dessus sont tout à fait correct, mais si vous voulez additionaly vérifier des
GET
paramètres lors de la manipulationPOST
,DELETE
,PUT
, etc. demande, vous devez vérifier la taille du$_GET
tableau.la source
Lorsqu'une méthode a été demandée, elle aura un
array
. Vérifiez donc simplement aveccount()
.3v4l.org/U51TE
la source
J'ai utilisé ce code. Ça devrait marcher.
Ce code ci-dessus fonctionnera avec
REST calls
et fonctionnera également avechtml form
la source
Vous pouvez obtenir toutes les données de chaîne de requête, c.-à-d.
www.example.com?id=2&name=r
Vous devez obtenir des données en utilisant
$_GET['id']
ou$_REQUEST['id']
.Publier des données signifie comme le formulaire que
<form action='' method='POST'>
vous devez utiliser$_POST
ou$_REQUEST
.la source