1038

PHP で使用されたリクエスト タイプ (GET、POST、PUT、または DELETE) を検出するにはどうすればよいですか?

4

13 に答える 13

1471

使用することで

$_SERVER['REQUEST_METHOD']

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

詳細については、$_SERVER 変数のドキュメントを参照してください。

于 2008-12-11T11:32:18.277 に答える
236

PHP の REST は非常に簡単に実行できます。http://example.com/test.phpを作成します(以下に概要を示します)。これを REST 呼び出しに使用します (例: http://example.com/test.php/testing/123/hello ) 。これはそのまま Apache と Lighttpd で動作し、書き換えルールは必要ありません。

<?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;
}
于 2009-05-22T10:52:06.740 に答える
26

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よりもこれを好む場合は、 a を使用して行うこともできます。if-else

GETHTML フォームで、またはそれ以外のメソッド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 での使用法

于 2015-10-27T11:16:10.540 に答える
14

また、 input_filterを使用してリクエスト メソッドを検出すると同時に、入力のサニテーションを通じてセキュリティを提供することもできます。

$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
于 2016-05-13T03:55:29.047 に答える
12

これは REST に関するものなので、サーバーからリクエスト メソッドを取得するだけでは不十分です。また、RESTful ルート パラメーターを受け取る必要もあります。RESTful パラメーターと GET/POST/PUT パラメーターを分離する理由は、リソースが識別のために固有の URL を持つ必要があるためです。

Slim を使用して PHP で RESTful ルートを実装する方法の 1 つを次に示します。

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');
于 2013-12-16T12:32:47.723 に答える
7
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();

このようにして、zend フレームワーク 2 でも達成できます。ありがとう。

于 2015-07-06T11:11:18.423 に答える
-5

任意のクエリ文字列データを取得できます。つまりwww.example.com?id=2&name=r

$_GET['id']またはを使用してデータを取得する必要があります$_REQUEST['id']

投稿データとは、<form action='' method='POST'>使用しなければならないフォーム$_POSTや などを意味します$_REQUEST

于 2016-01-01T11:37:53.583 に答える