PHP (GET, POST, PUT या DELETE) में अनुरोध प्रकार का पता लगाना


928

मैं यह कैसे पता लगा सकता हूं कि PHP में किस प्रकार का अनुरोध (GET, POST, PUT या DELETE) का उपयोग किया गया था?


20
HEAD =) को मत भूलना (विकल्प, ट्रिक और कनेक्ट भी, लेकिन मुझे नहीं लगता कि PHP कभी भी ऐसा होता है)।
ग्नुद

4
कैसे के बारे में PATCH?
पम्प्र

1
PATCH भी ठीक काम करती है। $_SERVER['REQUEST_METHOD'] === 'PATCH'
ursuleacv

जवाबों:


1326

का उपयोग करके

$_SERVER['REQUEST_METHOD']

उदाहरण

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // The request is using the POST method
}

अधिक जानकारी के लिए कृपया $ _SERVER चर के लिए दस्तावेज़ देखें ।


126
+1 करने के लिए - जब संदेह में, var_dump ($ _ SERVER) और उत्तर अक्सर भीतर होता है।
पॉल डिक्सन

10
यदि आप mypage.php? Var = कुछ पर POST करते हैं तो क्या होगा?
निक डेफ़

2
यह विधि POST होगी, लेकिन अगर आपको उन चरों को प्राप्त करने के लिए $ _GET का उपयोग करना है तो मुझे यकीन नहीं है।
OIS

24
@NathanLong मेरे अनुभव में गलत है। यदि आप mypage.php? Var = कुछ पर POST करते हैं तो 'कुछ' में होगा $_GET['var']
डेविड गैलाघर

14
$_POSTऔर $_GETदुर्भाग्य से कुछ नाम हैं। $_GETHTTP विधि की परवाह किए बिना URL के क्वेरी घटक से चर शामिल करें। $_POSTयदि अनुरोध के रूप में भेजा गया था तो फॉर्म फ़ील्ड होंगे application/x-www-form-urlencoded
पी.जे. डाइट्ज़

223

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;
}

20
यदि आप अपने एपीआई को उपलब्ध कराना चाहते हैं, तो आप किस इंटरप्रिटेशन इंजन का उपयोग कर रहे हैं, यह उद्धृत किए बिना, एक .htaccess फ़ाइल जोड़ें, जिसमें RewriteRule पर RewriteEngine ^ api /(.*)$ api.php / $ 1 है। आपकी एपीआई फ़ाइल को एपीआई कहा जाता है। php। इसके अलावा, जब से उपरोक्त कोड ब्लॉक लिखा गया था, PHP डेवलपर्स ने विभाजन फ़ंक्शन को रद्द कर दिया है। यह ठीक काम करता है यदि आप विस्फोट के साथ विभाजन को प्रतिस्थापित करते हैं।
जॉनन्यूसिग्यू जुएल

10
@सामने क्या है $_SERVER['PATH_INFO']?
शविश

10
@ सविश, आपने क्या शानदार विवरण देखा! PHP Notice: Undefined index: PATH_INFOयदि PATH_INFO अंदर नहीं है तो इससे छुटकारा मिल जाता है $_SERVER। मैं इसे तुरंत अपने बैग में जोड़ रहा हूं! यह कहने का एक तरीका है "मुझे पता है कि इस सरणी में उस तरह से एक प्रविष्टि नहीं हो सकती है, और मैं इसके लिए तैयार हूं, इसलिए बस चुप रहो और जो मैं तुम्हें बताता हूं वह करो"। :) धन्यवाद दोस्तों, इस उत्तर को पोस्ट करने और उस विशेष चरित्र में मेरा ध्यान लाने के लिए दोनों।
इंक्रेडिबल

16
मैं आमतौर पर @ के बजाय खाली का उपयोग करता हूं। बेहतर अभ्यास?
जुलिट

8
चर तरीकों का उपयोग करके अधिक संक्षिप्त तरीके के रूप में: <?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
सैंडविर्म

21

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 प्रश्न का संदर्भ लेना चाहूंगा:

HTTP प्रोटोकॉल का PUT और DELETE और PHP में उनका उपयोग


12

हम इनपुट सैनिटेशन के माध्यम से सुरक्षा प्रदान करते हुए अनुरोध पद्धति का पता लगाने के लिए input_filter का भी उपयोग कर सकते हैं ।

$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);

10

चूंकि यह 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');

न कि ओपी ने क्या मांगा। और यह भी, ओपी ने कहीं भी आरईएसटी का उल्लेख नहीं किया।
ब्रूनो फेरेरा

@BrunoFerreira क्या आप मुझे उत्तर हटाना चाहेंगे क्योंकि OP ने विशेष रूप से REST शब्द का उपयोग नहीं किया था?
nurettin


7

यह बहुत सरल है बस $ _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;
}
?>

1
"DELETE" मामला कभी हिट नहीं होगा क्योंकि यह संभव REQUEST_METHOD नहीं है। मान्य REQUEST_METHODs 'GET', 'HEAD', 'POST', 'PUT' हैं। उत्तर पोस्ट करने से पहले प्रलेखन पढ़ें (इस पृष्ठ पर कई उत्तरों में इंगित किया गया है)।
पैट्रिक

1
@Patrick, वास्तव में, "DELETE" मामला हिट हो जाएगा जब अनुरोध विधि DELETE है; फिर भी PHP में प्रलेखन इसका उल्लेख नहीं करता है। वास्तव में, किसी भी विधि में परिलक्षित होता है $_SERVER['REQUEST_METHOD'], यहां तक ​​कि अनुकूलित भी। याद रखें कि अनुरोध शीर्षलेख में विधि सिर्फ एक स्ट्रिंग है और इसकी शुद्धता की जांच करना हमारा कार्य है।
इवान डी पाज़ सेंटेनो

1
@PATrick DELETE को RFC7231 में परिभाषित किया गया है और यह सभी प्रमुख ब्राउज़रों में समर्थित है। tools.ietf.org/html/rfc7231#section-4.3.5 और $ _SERVER ["REQUEST_METHOD"] केवल एक स्ट्रिंग है।
रॉबर्ट तलाड़ा

@IvanDePazCenteno बिल्कुल। उपयोगकर्ता इनपुट पर कभी भरोसा न करें। उपयोगकर्ता इनपुट पर कभी भरोसा न करें।
रॉबर्ट तलाडा

6
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();

इस तरह आप zend फ्रेमवर्क 2 में भी हासिल कर सकते हैं। धन्यवाद।


आप नियंत्रक $ अनुरोध में कर सकते हैं = $ यह-> getRequest ()। और फिर, $ अनुरोध- >पोस्ट ()। $ अनुरोध भी देखें-> getMethod ()।
वासिली टोपोरोव

4

कोर 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;
}


?>

1

यह अतिरिक्त रूप से ध्यान देने योग्य है, कि $_GETजब आप अन्य प्रकार का उचित अनुरोध भेजते हैं, तब भी PHP सभी मापदंडों को पॉप्युलेट करेगा ।

ऊपर उत्तर में तरीके पूरी तरह से सही हैं, लेकिन यदि आप के लिए additionaly जाँच करना चाहते GETमापदंडों जबकि हैंडलिंग POST, DELETE, PUT, आदि अनुरोध, आप के आकार जांच करने की आवश्यकता $_GETसरणी।


0

जब एक विधि का अनुरोध किया गया था, तो यह एक होगा array। तो बस के साथ की जाँच करें count()

$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
    echo count($v)?
    $k.' was requested.':null;
}

3v4l.org/U51TE


0

मैंने इस कोड का इस्तेमाल किया। यह काम करना चाहिए।

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>

-4

आप कोई भी क्वेरी स्ट्रिंग डेटा प्राप्त कर सकते हैं www.example.com?id=2&name=r

आपको डेटा का उपयोग करना चाहिए $_GET['id']या$_REQUEST['id']

पोस्ट डेटा का मतलब उस फॉर्म की तरह है जिसका <form action='' method='POST'>आपको उपयोग करना चाहिए $_POSTया $_REQUEST

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.