#環境
AWSのEC2インスタンス上に、ApacheとPHPをインストールし作業しました。
また、curlを用いて、コマンドラインからHTTPリクエストをサーバーに送りました。
HTTPリクエストにはGETやらPOSTやらPUT、DELETEといったメソッドがあり、
無知すぎてこれらを判別するのにかなり苦労しまして、今回ここにまとめておこうと思い立ったわけです。
#はじめに試した方法(失敗)
はじめに、 $_GET と $_POST を使ってHTTPリクエストメソッドを判別できないか、試してみました。
$_GET
と $_POST
はそれぞれ、HTTPリクエストメソッドのGETとPOSTによって渡されたパラメータを返します。
例えば、以下のようなコマンドでGETとPOSTをリクエストし、成功したとします。
このとき、$_GET
と$_POST
からは"apple"が返されます。
[GETするコマンド]
curl (サーバーのURL)/?name=apple
----------------
[POSTするコマンド]
curl -d {"name": "apple"} (サーバーのURL)
$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)
$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)をまとめた記事が、ありがたいことに思ったよりもたくさん見られていて、驚き & 感謝です。 (ちょっと宣伝...😶)
それでは、最後まで読んでいただき、ありがとうございました!
また気が向いたら投稿します。('ω')ノシ