Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
$_GET / $_POST / $_REQUEST対応: PHP 4(2000)
クライアントから送信されたリクエストデータを取得するスーパーグローバル変数です。フォームの入力値やURLのクエリパラメータを受け取る際に使用されます。
構文
// URLのクエリパラメータを取得します。 $_GET['key']; // POSTリクエストで送信されたデータを取得します。 $_POST['key']; // GETとPOSTの両方を含むリクエストデータを取得します。 $_REQUEST['key']; // アップロードされたファイルの情報を取得します。 $_FILES['input_name'];
変数一覧
| 変数 | 概要 |
|---|---|
| $_GET | URLのクエリ文字列から取得したデータを格納します。『?key=value』の形式で送信されたデータが連想配列として入ります。 |
| $_POST | HTTPのPOSTメソッドで送信されたデータを格納します。フォームの『method="post"』で送信された値が入ります。 |
| $_REQUEST | 『$_GET』『$_POST』『$_COOKIE』の内容を統合した配列です。同名のキーがある場合の優先順位は『php.ini』の設定に依存します。 |
| $_FILES | アップロードされたファイルの情報を格納します。『name』『type』『tmp_name』『error』『size』の各キーが含まれます。 |
$_FILES の構造
| キー | 概要 |
|---|---|
| name | クライアント側でのファイル名です。 |
| type | ファイルのMIMEタイプです。クライアントが送信する値のため信頼できません。 |
| tmp_name | サーバーに一時保存されたファイルのパスです。 |
| error | アップロードに関するエラーコードです。『UPLOAD_ERR_OK』が成功を意味します。 |
| size | ファイルサイズをバイト数で表します。 |
サンプルコード
<?php
// $_GET でURLパラメータを取得します。
// URL: example.php?page=3&sort=date
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
$sort = isset($_GET['sort']) ? $_GET['sort'] : 'date';
echo "ページ: " . $page; // 『ページ: 3』と出力されます。
// $_POST でフォームデータを取得します。
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = isset($_POST['name']) ? trim($_POST['name']) : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';
// バリデーションを行います。
if (empty($name)) {
echo "名前を入力してください。";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "有効なメールアドレスを入力してください。";
} else {
echo "登録完了: " . htmlspecialchars($name);
}
}
// filter_input() を使った安全な取得方法です。
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id !== false && $id !== null) {
echo "ID: " . $id; // バリデーション済みの整数値です。
}
// $_FILES でファイルアップロードを処理します。
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
$tmpName = $_FILES['avatar']['tmp_name'];
$fileName = basename($_FILES['avatar']['name']); // パストラバーサル対策です。
$fileSize = $_FILES['avatar']['size'];
// ファイルサイズを確認します。
if ($fileSize > 2 * 1024 * 1024) {
echo "ファイルサイズは2MB以下にしてください。";
} else {
$ext = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
if (in_array($ext, $allowed, true)) {
$newName = uniqid() . '.' . $ext;
move_uploaded_file($tmpName, 'uploads/' . $newName);
echo "アップロード完了: " . htmlspecialchars($newName);
}
}
}
概要
『$_GET』と『$_POST』はクライアントから送信されたデータを受け取るスーパーグローバル変数です。ユーザーが送信するデータは常に改ざんされる可能性があるため、必ずバリデーションとサニタイジングを行ってください。HTMLに出力する場合は『htmlspecialchars()』でエスケープし、SQLに渡す場合は『プリペアドステートメント』を使用します。
『$_REQUEST』は『$_GET』と『$_POST』の両方を含みますが、どちらのメソッドで送信されたか区別できないため、使用は避けることを推奨します。リクエストメソッドの判定には『$_SERVER["REQUEST_METHOD"]』を使用してください。
安全な入力値の取得には『filter_input()』が便利です。バリデーションとサニタイジングを同時に行えるため、『$_GET』『$_POST』に直接アクセスするよりも安全にデータを取得できます。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。