PHPのPOSTのやり方を解説!|POSTについて理解を深めてPHPを使いこなそう
 
          
- システム
 エンジニア
- PHPのPOSTのやり方を教えてください。
- プロジェクト
 マネージャー
- PHPのPOSTのやり方や問題点などを紹介します。
PHPのPOSTとは?

            この記事ではPHPによるPOSTの送受信について解説します。ただしその前に、POSTとは何なのかについて知っておくべきでしょう。
POSTとはHTTP(Hypertext Transfer Protocol)の送信メソッドの1つです。インターネットの通信にはHTTPというプロトコル(通信の決まり事)が利用されていますが、POSTとはそのプロトコルの中の、データを送受信するための仕様の1つになります。
まずGETメソッドから学ぼう
HTTPではPOSTメソッドと対になる送信方法として、GETメソッドがあります。比較的わかりやすいGETから学ぶと、POSTの方の理解も早いでしょう。
GETやPOSTによる送信はHTMLのフォームを使うと簡単にできます。サーバ上のtest.phpというファイルのbodyタグ内に、以下のタグがあるとします。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         | 
                          <form action ="test.php" method="get">
                         
                          <input type="text" name="message"><br/>
                         
                          <input type="radio" name="sei" value="male" checked>男性<br/>
                         
                          <input type="radio" name="sei" value="female">女性<br/>
                         
                          <input type ="submit" value="送信">
                         | 
GETメソッドでフォームからパラメータを送信
上のフォームタグを実行すると、テキストボックスと2つのラジオボタン、送信ボタンが表示されます。これでテキストと性別の情報をGETメソッドでサーバに送信できます。それではテキストボックスに「abcde」入力して送信ボタンを押してみましょう。
するとURLが以下のように変化します。これがGETメソッドでパラメータが送信された状態になります。
| 
                          1
                         
                          2
                         | 
                          http://〇〇〇〇/test.php?message=abcde&sei=male
                         | 
GETメソッドによるパラメータの送信
インターネットをしていると今回のように、URLの終りに?や&がついた状態を見かけることがよくあります。これがGETメソッドでパラメータが送信された状態なのです。URLにパラメータが付加されているのでわかりやすいでしょう。
| 
                          1
                         
                          2
                         | 
                          URL?属性1=値1&属性2=値2&属性3=値3・・・
                         | 
それでは次にPHPで、GETメソッドで送信されたパラメータを受信するコードを記述しましょう。
PHPでGETメソッドの値を受信
以下のPHPのコードを同じtest.phpに記述してください。GETメソッドの値は、$_GET[“属性名”]で取得できます。以下のサンプルはそれをechoで表示しています。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         | 
                          <?php
                         
                          $message = $_GET["message"];
                         
                          echo $message . "<br>";
                         
                          $sei = $_GET["sei"];
                         
                          echo $sei;
                         
                          ?>
                         | 
これでGETで送信したパラメータを受信できることが確認できました。
パラメータがある時だけ表示するようにする
上のPHPサンプルは、GETでパラメータが送信されてない時でもPHPで取得して表示しようとします。その結果、BRタグの改行が表示されてしまいます。そこで以下のように直すと、パラメータを受信していない時は表示しないようにできます。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         | 
                          <?php
                         
                          if(isset($_GET["message"])) {
                         
                                  $message = $_GET["message"];
                         
                                  echo $message . "<br>";
                         
                                  $sei = $_GET["sei"];
                         
                                  echo $sei;
                         
                          }
                         
                          ?>
                         | 
isset(変数)は変数の中身があればtrue、なければfalseになるので、if文で判定すればパラメータがある時だけ表示できるということです。
GETメソッドの問題点
GETについての基本的な使い方は以上です。GETはパラメータがURLに付加されているのでわかりやすいですが、それがデメリットでもあります。パスワードのように表に出てはならないパラメータも、URLに付加されるので分かってしまいます。
またパラメータが多いとURLがやたらと長くなってしまいます。そういった理由から、パラメータを表に出さずに送信できる方法が必要になります。そこで役立つのが、URLにパラメータを付加しないPOSTメソッドなのです。
POSTによるパラメータの受信
POSTを使う方法は、ここまでを理解していれば簡単です。ここまでのサンプルのGETをPOSTにするだけで、POSTで送受信できます。
PHP
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         | 
                          <?php
                         
                          if(isset($_POST["message"])) {
                         
                                  $message = $_POST["message"];
                         
                                  echo $message . "<br>";
                         
                                  $sei = $_POST["sei"];
                         
                                  echo $sei;
                         
                          }
                         
                          ?>
                         | 
HTML
| 
                          1
                         
                          2
                         | 
                          <form action ="test.php" method="post">
                         | 
これでURLにパラメータを付加せずに、送受信できます。
POSTを使うだけでは安全ではない
なおPOSTメソッドを使えば安全になるからパスワードを送信しても大丈夫、と思うのは間違いです。「http://~」でアクセスする場合、パラメータはそのままのデータで送信されます。これが傍受された場合、中身を読み取られてしまいます。
それを解消するのがHTTPSです。「https://~」でアクセスするとデータが暗号化されるので、傍受されても解析が困難になるため安全になります。そういった理由から、今はHTTPを避けてHTTPSを利用するのが一般的になっています。
なおGoogleは検索順位でHTTPよりもHTTPSでアクセスするサイトを優遇すると表明しています。
POSTで配列を送信する
POSTメソッドで配列を送信して、PHPで受信することも可能です。
PHP
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         | 
                          <?php
                         
                          if(isset($_POST["flower"])) {
                         
                                  print_r($_POST["flower"]);
                         
                                  echo "<br>";
                         
                          }
                         
                          ?>
                         | 
HTML
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         | 
                          <form action ="test.php" method="post">
                         
                          <input type="checkbox" name="flower[]" value="sakura">サクラ<br>
                         
                          <input type="checkbox" name="flower[]" value="ume">梅<br>
                         
                          <input type="checkbox" name="flower[]" value="chulip">チューリップ<br>
                         
                          <input type ="submit" value="送信">
                         | 
実行すると以下のように、チェックを入れた個所が配列として渡されて表示されます。
| 
                          1
                         | 
                          Array ( [0] => sakura [1] => ume )
                         | 
PHPの最大送信サイズを確認する
PHPで送受信できるサイズは以下で確認できます。
| 
                          1
                         
                          2
                         
                          3
                         | 
                          $post_max_size = ini_get('post_max_size');
                         
                          echo $post_max_size;
                         | 
初期設定では8Mとなっていることが多いでしょう。なおこれを変更する場合はini_setで設定するのではなく、サーバにあるphp.iniを修正する必要があります。動作しているPHPのプログラム内で動的に変えることはできないということです。
- システム
 エンジニア
- PHPのPOSTのやり方がわかりました。
- プロジェクト
 マネージャー
- PHPのPOSTの理解を深めて、実際にコードを書いてみましょう。
PHPのPOSTを使いこなそう
PHPのPOSTについて解説しましたが、ご理解頂けましたでしょうか。PHPではGETと共に基本となる機能なので、まずはしっかりとマスターしましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
          
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
          数多くのエンジニアが集まります。

- 
              スマホアプリから業務系システムまで スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。 
- 
              充実した研修制度 毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。 
- 
              資格取得を応援 スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。 
- 
              東証プライム上場企業グループ オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。 安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。 
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
              まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
- 
              
              開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク月給29万~30万円東京都品川区(大崎駅)
- 
              
              遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク月給45万~60万円東京都港区(六本木駅)
- 
              
              病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク月給30万~30万円東京都豊島区(池袋駅)
- 
              
              開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク月給50万~50万円東京都豊島区(大塚駅)
- 
              
              債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務月給62万~67万円東京都文京区(後楽園駅)
- 
              
              PMO/東京都豊島区/【WEB面談可】/在宅勤務月給55万~55万円東京都豊島区(池袋駅)





