मैं यह कैसे पता लगा सकता हूं कि PHP में किस प्रकार का अनुरोध (GET, POST, PUT या DELETE) का उपयोग किया गया था?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
मैं यह कैसे पता लगा सकता हूं कि PHP में किस प्रकार का अनुरोध (GET, POST, PUT या DELETE) का उपयोग किया गया था?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
जवाबों:
का उपयोग करके
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
अधिक जानकारी के लिए कृपया $ _SERVER चर के लिए दस्तावेज़ देखें ।
$_GET['var']
।
$_POST
और $_GET
दुर्भाग्य से कुछ नाम हैं। $_GET
HTTP विधि की परवाह किए बिना URL के क्वेरी घटक से चर शामिल करें। $_POST
यदि अनुरोध के रूप में भेजा गया था तो फॉर्म फ़ील्ड होंगे application/x-www-form-urlencoded
।
PHP में REST बहुत सरल किया जा सकता है। Http://example.com/test.php (नीचे उल्लिखित) बनाएं । REST कॉल के लिए इसका उपयोग करें, जैसे http://example.com/test.php/testing/123/hello । यह अपाचे और लाइटटैप बॉक्स के बाहर काम करता है, और किसी भी पुनर्लेखन नियम की आवश्यकता नहीं है।
<?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;
}
@
सामने क्या है $_SERVER['PATH_INFO']
?
PHP Notice: Undefined index: PATH_INFO
यदि PATH_INFO अंदर नहीं है तो इससे छुटकारा मिल जाता है $_SERVER
। मैं इसे तुरंत अपने बैग में जोड़ रहा हूं! यह कहने का एक तरीका है "मुझे पता है कि इस सरणी में उस तरह से एक प्रविष्टि नहीं हो सकती है, और मैं इसके लिए तैयार हूं, इसलिए बस चुप रहो और जो मैं तुम्हें बताता हूं वह करो"। :) धन्यवाद दोस्तों, इस उत्तर को पोस्ट करने और उस विशेष चरित्र में मेरा ध्यान लाने के लिए दोनों।
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
HTTP विधि या तथाकथित का पता लगाना REQUEST METHOD
निम्नलिखित कोड स्निपेट का उपयोग करके किया जा सकता है।
$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
}
switch
यदि आप if-else
कथन पर इसे पसंद करते हैं तो आप इसका उपयोग भी कर सकते हैं ।
यदि HTML रूप में किसी अन्य विधि की आवश्यकता होती है GET
या POST
होती है, तो इसे अक्सर प्रपत्र में छिपे फ़ील्ड का उपयोग करके हल किया जाता है।
<!-- 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>
HTTP तरीकों से संबंधित अधिक जानकारी के लिए मैं निम्नलिखित StackOverflow प्रश्न का संदर्भ लेना चाहूंगा:
हम इनपुट सैनिटेशन के माध्यम से सुरक्षा प्रदान करते हुए अनुरोध पद्धति का पता लगाने के लिए input_filter का भी उपयोग कर सकते हैं ।
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
चूंकि यह REST के बारे में है, इसलिए सर्वर से केवल अनुरोध विधि प्राप्त करना पर्याप्त नहीं है। आपको RESTful मार्ग पैरामीटर भी प्राप्त करने की आवश्यकता है। रेस्टफुल पैरामीटर और GET / POST / PUT पैरामीटर को अलग करने का कारण यह है कि पहचान के लिए एक संसाधन का अपना विशिष्ट URL होना चाहिए।
यहाँ स्लिम का उपयोग करके PHP में Restful मार्गों को लागू करने का एक तरीका है:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
और उसी के अनुसार सर्वर को कॉन्फ़िगर करें।
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');
आप getenv
फ़ंक्शन का उपयोग कर सकते हैं और एक $_SERVER
चर के साथ काम नहीं करना है :
getenv('REQUEST_METHOD');
और जानकारी:
यह बहुत सरल है बस $ _SERVER ['REQUEST_METHOD'] का उपयोग करें;
उदाहरण:
<?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']
, यहां तक कि अनुकूलित भी। याद रखें कि अनुरोध शीर्षलेख में विधि सिर्फ एक स्ट्रिंग है और इसकी शुद्धता की जांच करना हमारा कार्य है।
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
इस तरह आप zend फ्रेमवर्क 2 में भी हासिल कर सकते हैं। धन्यवाद।
कोर php में आप ऐसा कर सकते हैं:
<?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;
}
?>
यह अतिरिक्त रूप से ध्यान देने योग्य है, कि $_GET
जब आप अन्य प्रकार का उचित अनुरोध भेजते हैं, तब भी PHP सभी मापदंडों को पॉप्युलेट करेगा ।
ऊपर उत्तर में तरीके पूरी तरह से सही हैं, लेकिन यदि आप के लिए additionaly जाँच करना चाहते GET
मापदंडों जबकि हैंडलिंग POST
, DELETE
, PUT
, आदि अनुरोध, आप के आकार जांच करने की आवश्यकता $_GET
सरणी।
जब एक विधि का अनुरोध किया गया था, तो यह एक होगा array
। तो बस के साथ की जाँच करें count()
।
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
मैंने इस कोड का इस्तेमाल किया। यह काम करना चाहिए।
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;
}
यह उपरोक्त कोड के साथ काम REST calls
करेगा और साथ काम भी करेगाhtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
आप कोई भी क्वेरी स्ट्रिंग डेटा प्राप्त कर सकते हैं www.example.com?id=2&name=r
आपको डेटा का उपयोग करना चाहिए $_GET['id']
या$_REQUEST['id']
।
पोस्ट डेटा का मतलब उस फॉर्म की तरह है जिसका <form action='' method='POST'>
आपको उपयोग करना चाहिए $_POST
या $_REQUEST
।