【PHP】$_GETや$_POSTは何者なのか

以前webアプリを開発した際
『$_GET』とか『$_POST』とかいった変数をプログラムの中で使っていました。

これまでの所、これらの正体やら挙動やらはあまり気にせず
「なんか知らんけどフォームの送信内容が入ってくれてる便利なやつ」くらいに思っていました。

しかしながら、今後PHPに習熟しようと思えば
やはりこれらについてできるだけ正確に理解しておいたほうが良いかと思います。

 

というわけで今回は、『$_GET』や『$_POST』について、
簡単にですが調べたことをまとめていきます。

 

  • こいつらは何なのか

『$_GET』や『$_POST』は『スーパーグローバル(変数)』と呼ばれるものに属しています。

スーパーグローバルには『$_GET』や『$_POST』の他にも、
『$_REQUEST』とか『$_PUT』『$_DELETE』なんかがありますが、今回は触れないでおきます。

 

  • 『$_GET』や『$_POST』の役割は?

『$_GET』や『$_POST』には
「ユーザーが入力フォームを使ってサーバーに送信した内容」が配列として保持されています。

クライアント(ここではユーザーが使っているPCやスマホ)がサーバーにデータを送信する方法(メソッド)は色々あります。
代表的なものがGETメソッドやPOSTメソッドです。

 

GETメソッドで送られたデータをphp側で参照する際に$_GETを使い、
POSTメソッドで送られたデータを参照する際には$_POSTを使います。

 

  • GETメソッドとPOSTメソッドの使い分けは?

送信内容を公開したいならGET、
秘密にしたいならPOSTを使います。

フォームの送信先が「localhost/sample.php」だったとしましょう。
このフォームに「id」という項目があり、そこに「2」を入力したとします。

GETメソッドでデータを送信した場合、当然ですが「localhost/sample.php」がサーバーから送られきます。
このときブラウザに表示されるURLを見ると
localhost/sample.php?id = 2」のように、URLの末尾にGETの送信内容が表示されます。

この性質を利用して、GETメソッドは
送信内容とその結果を共有させたい時」に使います。
検索結果やブログの記事などに使います。

 

続いてPOSTの例を見てみましょう。

フォームの送信先は先程と同じく「localhost/sample.php」で、送信内容は「id = 2」だったとします。

この場合もlocalhost/sample.phpがサーバーから送られてきますが、GETと違い、URLはそのままです。
つまりURLを見ても送信内容はわかりません。

というわけで、POSTメソッドは送信内容を秘密にしたいときに使用します。
入力フォームにIDとパスワードを入れてマイページにアクセスする、といったことはよくありますが
マイページのURLにIDとパスワードが含まれているとどうなるでしょう?
もしもこのURLが流出してしまったら、どこの誰でもマイページにアクセスできるようになってしまいます。

 

 

まとめ

  • PHPにはスーパーグローバルという変数がある。
    $_GETや$_POSTはその一部。
  • $_GETや$_POSTには、呼び出し元のhtmlにあるformの
    送信内容が配列として保持されている
  • 送信内容を共有したい時にGET,
    秘密にしたい時POSTを使う

 

参考にしたサイト

gray-code.com