1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【PHP】HTTPリクエストメソッドの判別方法

Last updated at Posted at 2021-07-27

#環境
AWSのEC2インスタンス上に、ApacheとPHPをインストールし作業しました。
また、curlを用いて、コマンドラインからHTTPリクエストをサーバーに送りました。
HTTPリクエストにはGETやらPOSTやらPUTDELETEといったメソッドがあり、
無知すぎてこれらを判別するのにかなり苦労しまして、今回ここにまとめておこうと思い立ったわけです。

#はじめに試した方法(失敗)
はじめに、 $_GET$_POST を使ってHTTPリクエストメソッドを判別できないか、試してみました。

$_GET$_POSTはそれぞれ、HTTPリクエストメソッドのGETとPOSTによって渡されたパラメータを返します。

例えば、以下のようなコマンドでGETとPOSTをリクエストし、成功したとします。
このとき、$_GET$_POSTからは"apple"が返されます。

[GETするコマンド]
curl (サーバーのURL)/?name=apple
----------------
[POSTするコマンド]
curl -d {"name": "apple"} (サーバーのURL)
index.php
$get_param = $_GET["name"];
//出力: $get_para => "apple"
----------------
$post_param = $_POST["name"];
//出力: $post_post => "apple"

この方法は、HTTPリクエスト時にパラメータが指定されていなければ、
受けたリクエストメソッドがGETなのかPOSTなのかを判別することができません。

さらに、$_PUTとか$_DELETE残念ながら存在していないようですので、GETとPOST以外のリクエストメソッドは当然判別することができません。

私はこいつらがメジャーなせいで、かなり悩まされました。
(そもそも、もしや世の中ではパラメータを受け取れることが最重要で、それが何のリクエストメソッドかは二の次なのか...?)

追記:そもそも、HTTPリクエストメソッドを判別する方法は後述の$_SERVERが適当であり、
$_GET$_POSTはパラメータを受け取るために使われるものになります。
(本記事に@tadsan様よりコメントを頂きました。詳細についてはコメントの方をご参照ください。)

#HTTPリクエストメソッドを判別する方法
①で悩み続けた私が、苦行の果てに発見した手法が$_SERVER['REQUEST_METHOD']を用いるもの。

まず、$_SERVERというのは、 サーバー情報および実行時の環境情報を取得するものだそうです。

そしてこの$_SERVERは、キーはめちゃくちゃたくさんある連想配列なのですが、
キーの中に先述の**REQUSET_METHOD**があり、指定するとHTTPリクエストメソッド名を返してくれます。

以下、例を挙げます。

[GETするコマンド]
curl (サーバーのURL)
----------------
[DELETEするコマンド]
curl -X DELETE (サーバーのURL)
index.php
$method = $_SERVER["REQUEST_METHOD"];
//出力: $method => "GET"
----------------
$method = $_SERVER["REQUEST_METHOD"];
//出力: $method => "DELETE"

以上のように、GETやPOSTでパラメータを指定していなくても、
HTTPリクエストメソッドを判別することができます。

また、GETとPOST以外のリクエストメソッドの名前も返すことができるため、
PUTやDELETEなどのHTTPリクエストメソッドを判別することができます。

#おわりに
今回は、PHPでHTTPリクエストメソッドを判別する方法についてまとめました。
それぞれのパラメータを取得する方法は他にもたくさんありましたが、
それらは調べればすぐに出てきましたので、今回は割愛いたしました。



[Unity Student Planに加入する方法](https://qiita.com/bigsugarG/items/dc547cf2b0913dabf800)をまとめた記事が、ありがたいことに思ったよりもたくさん見られていて、驚き & 感謝です。 (ちょっと宣伝...😶)

それでは、最後まで読んでいただき、ありがとうございました!
また気が向いたら投稿します。('ω')ノシ

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?