Yanıtlar:
Kullanarak
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
Daha fazla ayrıntı için lütfen $ _SERVER değişkeninin belgelerine bakın .
$_GET['var']
.
$_POST
ve $_GET
ne yazık ki adlandırılmış. $_GET
HTTP yönteminden bağımsız olarak URL'nin sorgu bileşenindeki değişkenleri içerir. $_POST
istek olarak gönderildiyse form alanlarını içerir application/x-www-form-urlencoded
.
PHP REST oldukça basit yapılabilir. Create http://example.com/test.php (aşağıda açıklanmıştır). REST çağrıları için bunu kullanın, örneğin http://example.com/test.php/testing/123/hello . Bu, kutunun dışında Apache ve Lighttpd ile çalışır ve yeniden yazma kurallarına gerek yoktur.
<?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;
}
@
Önünde ne var $_SERVER['PATH_INFO']
?
PHP Notice: Undefined index: PATH_INFO
PATH_INFO içeri girmezse kurtulur $_SERVER
. Bunu hemen hileler çantama ekliyorum! "Ben bu dizide bu şekilde adlandırılmış bir giriş olmayabilir biliyorum ve bunun için hazırım, bu yüzden sadece çeneni kapat ve sana söylediklerimi yap" demenin bir yolu. :) Teşekkürler çocuklar, hem bu yanıtı yayınladığım için hem de dikkatimi o karaktere getirdiğim için.
<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
HTTP yönteminin veya böyle bir yöntemin algılanması, REQUEST METHOD
aşağıdaki kod snippet'i kullanılarak yapılabilir.
$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
}
Bunu switch
tercih ederseniz,if-else
deyim .
Bir HTML formunda GET
veya dışında bir yöntem POST
gerekiyorsa, bu genellikle formdaki gizli bir alan kullanılarak çözülür.
<!-- 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 yöntemleri hakkında daha fazla bilgi için aşağıdaki StackOverflow sorusuna başvurmak istiyorum:
Girdi_filterini istek girişini algılamak için kullanabilirken, aynı zamanda girdi sanitasyonu yoluyla güvenlik de sağlayabiliriz.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Bu REST ile ilgili olduğundan, sadece istek yöntemini sunucudan almak yeterli değildir. Ayrıca RESTful rota parametrelerini de almanız gerekir. RESTful parametrelerini ve GET / POST / PUT parametrelerini ayırmanın nedeni, bir kaynağın tanımlama için kendi benzersiz URL'sine sahip olması gerektiğidir.
İşte Slim kullanarak PHP RESTful yolları uygulamak için bir yol:
https://github.com/codeguy/Slim
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Ve sunucuyu buna göre yapılandırın.
AltoRouter kullanan başka bir örnek:
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
İşlevi kullanabilirsiniz ve bir $_SERVER
değişkenle çalışmak zorunda değilsiniz :
getenv('REQUEST_METHOD');
Daha fazla bilgi:
Çok Basit sadece $ _SERVER ['REQUEST_METHOD'] kullanın;
Misal:
<?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']
, hatta özelleştirilmiş yöntemlere yansıtılır . Yöntemin istek üstbilgisinde yalnızca bir dize olduğunu ve doğruluğunu kontrol etmek bizim görevimiz olduğunu unutmayın.
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
Bu şekilde zend framework 2'de de başarabilirsiniz. Teşekkürler.
Çekirdek php'de şöyle yapabilirsiniz:
<?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;
}
?>
Ayrıca, PHP'nin tüm $_GET
, başka türden uygun bir istek gönderirken bile parametreleri .
Yukarıdaki yanıtlarda Yöntemleri için Additionaly çek istiyorum ancak eğer tamamen doğru GET
işlerken parametreleri POST
, DELETE
, PUT
vb isteği, sen boyutunu kontrol etmek gerek $_GET
dizide.
Bir yöntem istendiğinde bir array
. Sadece kontrol edin count()
.
$m=['GET'=>$_GET,'POST'=>$_POST];
foreach($m as$k=>$v){
echo count($v)?
$k.' was requested.':null;
}
Bu kodu kullandım. İşe yaramalı.
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;
}
Bu yukarıdaki kod ile çalışacak REST calls
ve aynı zamanda çalışacaktırhtml form
<form method="post">
<input name="_method" type="hidden" value="delete" />
<input type="submit" value="Submit">
</form>
Herhangi bir sorgu dizesi verisi alabilirsiniz. www.example.com?id=2&name=r
Sen kullanarak verileri almak gerekir $_GET['id']
veya $_REQUEST['id']
.
Formu gibi Gönderi veri araçları <form action='' method='POST'>
kullanmak gerekir $_POST
ya $_REQUEST
.