পিএইচপি-তে কোন অনুরোধের প্রকারটি (GET, POST, PUT বা DELETE) ব্যবহৃত হয়েছিল তা আমি কীভাবে সনাক্ত করতে পারি?
PATCH
?
$_SERVER['REQUEST_METHOD'] === 'PATCH'
পিএইচপি-তে কোন অনুরোধের প্রকারটি (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
।
পিএইচপি মধ্যে 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;
}
@
সামনে কি আছে $_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); ?>
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>
এইচটিটিপি পদ্ধতি সম্পর্কিত আরও তথ্যের জন্য আমি নীচের স্ট্যাকওভারফ্লো প্রশ্নটি উল্লেখ করতে চাই:
এইচটিটিপি প্রোটোকলের পিটি এবং ডিলেট এবং পিএইচপি-তে তাদের ব্যবহার
আমরা ইনপুট স্যানিটেশন মাধ্যমে সুরক্ষা প্রদান করার সময় অনুরোধের পদ্ধতিটি সনাক্ত করতে ইনপুট_ফিল্টারটিও ব্যবহার করতে পারি ।
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
যেহেতু এটি আরআরএসটি সম্পর্কে, তাই সার্ভার থেকে অনুরোধের পদ্ধতিটি পাওয়া যথেষ্ট নয়। আপনাকে 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');
আপনি getenv
ফাংশনটি ব্যবহার করতে পারেন এবং কোনও $_SERVER
ভেরিয়েবলের সাথে কাজ করতে হবে না :
getenv('REQUEST_METHOD');
অধিক তথ্য:
এটি খুব সহজ 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;
}
?>
$_SERVER['REQUEST_METHOD']
এমনকি স্বনির্ধারিত পদ্ধতিতেও । মনে রাখবেন যে পদ্ধতিটি অনুরোধ শিরোনামের কেবল একটি স্ট্রিং এবং এটির সঠিকতা পরীক্ষা করা আমাদের কাজ task
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
এইভাবে আপনি জেন্ড ফ্রেমওয়ার্ক 2 এও অর্জন করতে পারেন। ধন্যবাদ।
কোর পিএইচপি তে আপনি এটি করতে পারেন:
<?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
আপনি অন্য ধরণের উপযুক্ত অনুরোধ প্রেরণ করার পরেও পিএইচপি সমস্ত প্যারামিটারকে জনপ্রিয় করবে ।
উপরে উত্তরগুলিতে যে পদ্ধতি সম্পূর্ণরূপে সঠিক, তবে যদি তোমার জন্য 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>
আপনি যে কোনও প্রশ্নের স্ট্রিং ডেটা পেতে পারেন ie www.example.com?id=2&name=r
আপনার অবশ্যই ডেটা ব্যবহার করতে হবে $_GET['id']
বা $_REQUEST['id']
।
পোস্ট ডেটা মানে ফর্মের মতো <form action='' method='POST'>
আপনাকে অবশ্যই ব্যবহার করতে হবে $_POST
বা $_REQUEST
।