filter_input

関数の概要

PHPの filter_input 関数は、GETやPOSTなどのスーパーグローバル変数から送信されたデータを安全に取得しつつ、必要に応じてフィルタリング(バリデーションやサニタイズ)を行うための関数です。直接スーパーグローバル変数を参照するよりも安全性が高く、入力値の検証やデータの整形を効率的に行えます。

パラメータの説明

  • $type(int):入力データの種類を指定します。主に INPUT_GET(GET)、INPUT_POST(POST)、INPUT_COOKIE(Cookie)、INPUT_SERVER(サーバ変数)、INPUT_ENV(環境変数)が使われます。
  • $variable_name(string):取得したい変数名を指定します。
  • $filter(int):適用するフィルターの種類を指定します。デフォルトは FILTER_DEFAULT(単に値を取得)で、FILTER_VALIDATE_INTなど多数のオプションがあります。
  • $options(int|array|null):フィルターのオプションやフラグを指定できます。例えば、最小値・最大値の設定など、より細かい条件を指定できます。

戻り値

指定した変数の値が存在し、かつフィルターを通過した場合はフィルター処理後の値が返されます。値が存在しなかったり、フィルターに失敗した場合は false または null が返ることがあります。

使用例

基本的な使い方(GETから整数値を取得)

<?php
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false || $id === null) {
    echo "idパラメータが不正です。";
} else {
    echo "取得したid: " . $id;
}
?>

GETパラメータのidを整数として取得し、整数でない場合はエラーメッセージを表示します。

POSTのメールアドレスをバリデーションする例

<?php
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($email === false) {
    echo "有効なメールアドレスを入力してください。";
} else {
    echo "入力されたメールアドレス: " . htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
}
?>

POSTで送信されたメールアドレスの妥当性をチェックし、有効な場合のみ表示します。

複数のオプションを指定して整数を取得(範囲指定)

<?php
$options = [
    'options' => [
        'min_range' => 1,
        'max_range' => 100
    ]
];
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, $options);
if ($page === false) {
    echo "ページ番号は1から100の範囲で指定してください。";
} else {
    echo "現在のページ番号: " . $page;
}
?>

GETパラメータのpageに対し、1~100の範囲内の整数であるかを検証しています。

関連する関数

  • filter_var:変数の値をフィルタリング(バリデーション・サニタイズ)する関数
  • filter_var_array:配列の値を一括でフィルタリングする関数
  • filter_input_array:複数の入力変数を一括でフィルタリング・取得する関数

まとめ

filter_input関数は、ユーザーからの入力を安全に取得し適切に検証・整形できる便利な関数です。スーパーグローバル変数を直接扱うよりもコードが簡潔でミスが減り、セキュリティ面でも優れています。GETやPOSTの値を扱う際にはぜひ積極的に活用しましょう。