PHP で使用されたリクエスト タイプ (GET、POST、PUT、または DELETE) を検出するにはどうすればよいですか?
13 に答える
使用することで
$_SERVER['REQUEST_METHOD']
例
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// The request is using the POST method
}
詳細については、$_SERVER 変数のドキュメントを参照してください。
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;
}
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 の質問を参照してください。
また、 input_filterを使用してリクエスト メソッドを検出すると同時に、入力のサニテーションを通じてセキュリティを提供することもできます。
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
これは 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');
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();
このようにして、zend フレームワーク 2 でも達成できます。ありがとう。
任意のクエリ文字列データを取得できます。つまりwww.example.com?id=2&name=r
$_GET['id']またはを使用してデータを取得する必要があります$_REQUEST['id']。
投稿データとは、<form action='' method='POST'>使用しなければならないフォーム$_POSTや などを意味します$_REQUEST。