GETとPOST:使い分け
PHPにおけるHTTP GETとPOSTの違いを理解します
「GETとPOST:使い分け」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
Web PHPにおけるHTTPメソッド
ブラウザーがHTMLフォームを送信するときは、GETまたはPOSTのHTTPメソッドを使用します。PHPでは、送信されたデータをスーパーグローバルから取得します:
$_GET— URLに追加されたデータ$_POST— リクエストボディ内のデータ
GETメソッド
GETは、フォームデータをクエリ文字列のパラメーターとしてURLに追加します:
<!-- HTML form -->
<form method="GET" action="search.php">
<input name="query" type="text">
<button type="submit">Search</button>
</form>
<!-- URL becomes: search.php?query=php+tutorial -->
<?php
$q = $_GET['query'] ?? '';
echo 'You searched for: ' . htmlspecialchars($q);POSTメソッド
POSTはデータをHTTPリクエストボディで送信します。URLには表示されません:
<!-- HTML form -->
<form method="POST" action="login.php">
<input name="email" type="email">
<input name="password" type="password">
<button type="submit">Log In</button>
</form>
<?php
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';GETを使用する場面
次の場合はGETを使用します:
- リクエストがべき等である(副作用がない)
- 検索クエリ、フィルター、ページネーションなど、データをURLに含められる
- ブックマークや共有が可能なURLにしたい
- データが機密情報ではない
POSTを使用する場面
次の場合はPOSTを使用します:
- リクエストによってサーバーの状態が変更される(作成、更新、削除)
- パスワードや個人情報など、データが機密情報である
- ファイルや長いテキストなど、大量のデータを送信する
- ブラウザーやプロキシにデータをキャッシュさせたくない
GETの長さの制限
GETリクエストにはURLの長さ制限があります(実際には通常約2000文字です)。POSTには、サーバー設定を除けば実用上の制限はありません:
<?php
// php.ini settings for POST limits:
// post_max_size = 8M (total POST body size)
// upload_max_filesize = 2M
// Check current limits at runtime:
echo ini_get('post_max_size'); // 8M
echo ini_get('upload_max_filesize'); // 2M$_REQUESTスーパーグローバル
$_REQUESTは$_GET、$_POST、$_COOKIEを統合します。便利ですが、データの取得元が分かりにくくなります:
<?php
// Works for both GET and POST but is ambiguous
$name = $_REQUEST['name'] ?? '';
// Better: be explicit about the expected method
$name = match($_SERVER['REQUEST_METHOD']) {
'GET' => $_GET['name'] ?? '',
'POST' => $_POST['name'] ?? '',
default => '',
};リクエストメソッドの確認
フォームデータを処理する前に、必ずリクエストメソッドを確認します:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
if (!empty($name)) {
echo 'Hello, ' . htmlspecialchars($name);
}
} else {
// Show empty form
}HTTPSとデータセキュリティ
POSTを使用しても、HTTPSを使用しなければデータは平文で見える状態です。主なセキュリティルールは次のとおりです:
- 本番環境では必ずHTTPSを使用する
- GETでパスワードを送信しない
- HTTP経由のPOSTも安全ではない。HTTPSはボディも暗号化する
POST後のリダイレクト(PRGパターン)
POSTが成功した後、GETリクエストにリダイレクトして、更新時の二重送信を防ぎます:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Process the form...
$id = saveToDatabase($_POST);
// Post-Redirect-Get (PRG) pattern
header('Location: /success.php?id=' . $id);
exit;
}ファイルアップロード用のマルチパートフォーム
ファイルをアップロードするには、フォームでPOSTとenctype="multipart/form-data"を使用する必要があります:
<!-- Required for file uploads -->
<form method="POST" action="upload.php"
enctype="multipart/form-data">
<input type="file" name="avatar">
<button type="submit">Upload</button>
</form>
<?php
$file = $_FILES['avatar'];
echo $file['name']; // original filename確認問題
ユーザー名とパスワードを含むログインフォームを送信するとき、どのHTTPメソッドを使用すべきですか:
まとめ: GETとPOSTの比較
主な違い:
- GET — URL内、ブックマーク可能、副作用なし、サイズ制限あり
- POST — ボディ内、機密データに適する、URLの長さ制限なし
- GETとPOSTの両方のデータを保護するため、必ずHTTPSを使用する
- 処理する前に
$_SERVER['REQUEST_METHOD']を確認する - PRGパターンを適用してPOSTの二重送信を防ぐ
よくある質問
「GETとPOST:使い分け」レッスンは無料ですか?
はい。「GETとPOST:使い分け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「GETとPOST:使い分け」で何を学びますか?
PHPにおけるHTTP GETとPOSTの違いを理解します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「GETとPOST:使い分け」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- GETとPOST:使い分け
- スーパーグローバルでフォームデータを読み取る
- 入力値のバリデーション手法
- ユーザー入力のサニタイズ