পিএইচপি-তে অনুরোধের প্রকার সনাক্তকরণ (জিইটি, পোস্ট, পুট বা মুছে ফেলুন)


928

পিএইচপি-তে কোন অনুরোধের প্রকারটি (GET, POST, PUT বা DELETE) ব্যবহৃত হয়েছিল তা আমি কীভাবে সনাক্ত করতে পারি?


20
হেড = ভুলে যাবেন না) (বিকল্পগুলি, ট্র্যাক এবং সংযুক্তিও, তবে আমার মনে হয় না যে পিএইচপি কখনও সেগুলি পায়))
gnud

4
কীভাবে PATCH?
পিএমপিআর

1
প্যাচও ভাল কাজ করে। $_SERVER['REQUEST_METHOD'] === 'PATCH'
ursuleacv

উত্তর:


1325

ব্যবহার করে

$_SERVER['REQUEST_METHOD']

উদাহরণ

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

আরও তথ্যের জন্য দয়া করে $ _SERVER ভেরিয়েবলের জন্য ডকুমেন্টেশন দেখুন ।


126
এটির জন্য +1 - সন্দেহ হলে, var_dump (S _ সার্ভার) এবং উত্তরটি প্রায়শই এর মধ্যে থাকে।
পল ডিকসন

10
আপনি যদি আমার পৃষ্ঠায় পোস্ট করেন তবে কি হবে? Php? Var = কিছু?
নিকফ

2
পদ্ধতিটি পোষ্ট হবে তবে সেই ভেরিয়েবলগুলি নিশ্চিত করার জন্য আপনাকে যদি $ _GET ব্যবহার করতে হয় তবে নিশ্চিত নই।
ওআইএস

24
@ নাথানলং আমার অভিজ্ঞতায় যা ভুল। আপনি যদি mypage.php? Var = কিছুতে পোষ্ট করেন তবে 'কিছু' থাকবে $_GET['var']
ডেভিড গ্যালাগার

14
$_POSTএবং $_GETকিছুটা দুর্ভাগ্যক্রমে নাম দেওয়া হয়েছে। $_GETHTTP পদ্ধতি নির্বিশেষে URL এর ক্যোয়ারী উপাদান থেকে ভেরিয়েবলগুলি থাকতে পারে। $_POSTঅনুরোধটি প্রেরণ করা হলে ফর্ম ক্ষেত্রগুলি থাকবে application/x-www-form-urlencoded
পিজে ডায়েজ

223

পিএইচপি মধ্যে REST বেশ সহজ করা যেতে পারে। Http://example.com/test.php তৈরি করুন (নীচে বর্ণিত)। এটি আরএসটি কলের জন্য ব্যবহার করুন, যেমন: 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
আপনি কী কী ইন্টারপ্রিটিং ইঞ্জিন ব্যবহার করছেন তা উদ্ধৃত না করে যদি আপনি আপনার এপিআই উপলব্ধ রাখতে চান, তবে RewritRule ^ api /(.*)$ api.php / $ 1 এ RewritEngine সমন্বিত একটি .htaccess ফাইল যুক্ত করুন এটি আপনার API ফাইলটিকে এপিআই বলে। পিএইচপি। এছাড়াও, উপরের কোড ব্লকটি লেখা হওয়ার পরে, পিএইচপি বিকাশকারীরা বিভক্ত ফাংশনটি অবমূল্যায়ন করেছে। আপনি বিস্ফোরণের সাথে বিভক্ত প্রতিস্থাপন যদি এটি দুর্দান্ত কাজ করে।
JonTheNiceGuy

10
@সামনে কি আছে $_SERVER['PATH_INFO']?
Svish

10
@ সুইশ, আপনি কি দুর্দান্ত বিবরণ লক্ষ্য করেছেন! এটি পরিত্রাণ পরার PHP Notice: Undefined index: PATH_INFOক্ষেত্রে PATH_INFO মধ্যে নয় $_SERVER। আমি এই মুহুর্তে আমার ব্যাগের কৌশলগুলিতে এটি যুক্ত করছি! এটি বলার একটি উপায় "আমি জানি এই অ্যারেটিতে নামটির কোনও নাম থাকতে পারে না, এবং আমি তার জন্য প্রস্তুত, সুতরাং কেবল চুপ করে থাকুন এবং আমি আপনাকে যা বলেছি তা করুন"। :) ধন্যবাদ সবাই, এই উত্তরটি পোস্ট করার জন্য এবং এতে আমার বিশেষ মনোযোগ আকর্ষণ করার জন্য উভয়ই।
inkredibl

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

REQUEST METHODনিম্নলিখিত কোড স্নিপেট ব্যবহার করে HTTP পদ্ধতি বা তথাকথিত সনাক্তকরণ করা যেতে পারে done

$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বিবৃতিটির চেয়ে এটি পছন্দ করেন তবে আপনি এটি ব্যবহার করেও করতে পারেন ।

যদি এইচটিএমএল আকারে 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>

এইচটিটিপি পদ্ধতি সম্পর্কিত আরও তথ্যের জন্য আমি নীচের স্ট্যাকওভারফ্লো প্রশ্নটি উল্লেখ করতে চাই:

এইচটিটিপি প্রোটোকলের পিটি এবং ডিলেট এবং পিএইচপি-তে তাদের ব্যবহার


12

আমরা ইনপুট স্যানিটেশন মাধ্যমে সুরক্ষা প্রদান করার সময় অনুরোধের পদ্ধতিটি সনাক্ত করতে ইনপুট_ফিল্টারটিও ব্যবহার করতে পারি

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

10

যেহেতু এটি আরআরএসটি সম্পর্কে, তাই সার্ভার থেকে অনুরোধের পদ্ধতিটি পাওয়া যথেষ্ট নয়। আপনাকে RESTful রুট পরামিতিগুলিও গ্রহণ করতে হবে। RESTful পরামিতি এবং GET / POST / PUT পরামিতিগুলি পৃথক করার কারণ হ'ল কোনও সংস্থার সনাক্তকরণের জন্য নিজস্ব অনন্য URL থাকা দরকার।

স্লিম ব্যবহার করে পিএইচপি-তে RESTful রুটগুলি প্রয়োগের একটি উপায় এখানে রয়েছে:

https://github.com/codeguy/Slim

$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
  echo "Hello, $name";
});
$app->run();

এবং সেই অনুযায়ী সার্ভারটি কনফিগার করুন।

আল্টোরোউটার ব্যবহার করে এখানে আরও একটি উদাহরণ দেওয়া হয়েছে:

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');

ওপি যা চেয়েছিল তা নয়। এবং এছাড়াও, ওপি কোথাও আরআরএসটি উল্লেখ করেনি।
ব্রুনো

@ ব্রুনোফেরিরা আপনি কি উত্তরটি মুছে ফেলতে চাইবেন কারণ ওপি বিশেষত আরএসএস শব্দটি ব্যবহার করেনি?
নুরেটিন

10

আপনি getenvফাংশনটি ব্যবহার করতে পারেন এবং কোনও $_SERVERভেরিয়েবলের সাথে কাজ করতে হবে না :

getenv('REQUEST_METHOD');

অধিক তথ্য:

http://php.net/manual/en/function.getenv.php


7

এটি খুব সহজ just _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
"মুছে ফেলা" মামলাটি কখনও আঘাত হারাবে না কারণ এটি কোনও সম্ভাব্য REQUEST_METHOD নয়। বৈধ REQUEST_METHOD গুলি হ'ল 'জিইটি', 'হেড', 'পোস্ট', 'পুট'। কোনও উত্তর পোস্ট করার আগে ডকুমেন্টেশনটি পড়ুন (এই খুব পৃষ্ঠায় অসংখ্য উত্তরে নির্দেশিত)।
প্যাট্রিক

1
@ পেট্রিক, আসলে অনুরোধের পদ্ধতিটি মুছে ফেলা হলে "মুছে ফেলুন" মামলাটি হিট হবে; তবুও পিএইচপি-তে ডকুমেন্টেশনগুলি এর উল্লেখ করে না। প্রকৃতপক্ষে, যে কোনও পদ্ধতি প্রতিফলিত হয় $_SERVER['REQUEST_METHOD']এমনকি স্বনির্ধারিত পদ্ধতিতেও । মনে রাখবেন যে পদ্ধতিটি অনুরোধ শিরোনামের কেবল একটি স্ট্রিং এবং এটির সঠিকতা পরীক্ষা করা আমাদের কাজ task
ইভান দে পাজ সেন্তেনো

1
@ পেট্রিক ডিলিটিকে আরএফসি 7231 এ সংজ্ঞায়িত করা হয়েছে এবং সমস্ত বড় ব্রাউজারে এটি সমর্থিত। টুলস.এইটিএফ.আর.জি.এইচটিএম / আরএফসি 7231# সেকশন 4.3.3.5 এবং $ _SERVER ["REQUEST_METHOD"] কেবল একটি স্ট্রিং।
রবার্ট তালদা 16'19

নিবন্ধন করুন কখনও ব্যবহারকারী ইনপুট বিশ্বাস করবেন না। কখনও ব্যবহারকারী ইনপুট বিশ্বাস করবেন না।
রবার্ট তালদা

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

এইভাবে আপনি জেন্ড ফ্রেমওয়ার্ক 2 এও অর্জন করতে পারেন। ধন্যবাদ।


আপনি নিয়ামক তৈরি করতে পারেন $ অনুরোধ = $ এটি-> getRequest ()। এবং তারপরে, $ অনুরোধ-> isPost ()। অনুরোধ-> getMethod () দেখুন।
ভ্যাসিলি টপোরভ

4

কোর পিএইচপি তে আপনি এটি করতে পারেন:

<?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আপনি অন্য ধরণের উপযুক্ত অনুরোধ প্রেরণ করার পরেও পিএইচপি সমস্ত প্যারামিটারকে জনপ্রিয় করবে ।

উপরে উত্তরগুলিতে যে পদ্ধতি সম্পূর্ণরূপে সঠিক, তবে যদি তোমার জন্য 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

আপনি যে কোনও প্রশ্নের স্ট্রিং ডেটা পেতে পারেন ie www.example.com?id=2&name=r

আপনার অবশ্যই ডেটা ব্যবহার করতে হবে $_GET['id']বা $_REQUEST['id']

পোস্ট ডেটা মানে ফর্মের মতো <form action='' method='POST'>আপনাকে অবশ্যই ব্যবহার করতে হবে $_POSTবা $_REQUEST

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.