関数の概要
PHPの filter_input 関数は、GETやPOST、COOKIEなどの外部からの入力データを安全に取得し、必要に応じてフィルタリングやバリデーションを行うための便利な関数です。これにより直接スーパーグローバル変数を操作するよりもセキュリティが向上し、不正なデータを防ぐことができます。
パラメータの説明
$type(int): 入力の種類を指定します。代表的な定数はINPUT_GET(GET)、INPUT_POST(POST)、INPUT_COOKIE(COOKIE)、INPUT_SERVER(サーバ変数)、INPUT_ENV(環境変数)です。$variable_name(string): 取得したい変数の名前を指定します。$filter(int): 適用するフィルターを指定します。デフォルトはFILTER_DEFAULTで生の値を返します。例としてFILTER_SANITIZE_STRING(文字列のサニタイズ)、FILTER_VALIDATE_INT(整数の検証)などがあります。$options(array|int|null): フィルターに渡す追加のオプションやフラグを指定できます。フィルターによって使用方法が異なります。
戻り値
指定した入力からフィルタリングされた値を返します。入力が存在しない場合やフィルターに失敗した場合は false か null を返すことがあります。戻り値の型はフィルターの種類により異なります。
使用例
基本的な使い方(GETパラメータの取得)
<?php
// URLに ?id=123 があるときの取得例
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false || $id === null) {
echo "idは整数で指定してください。";
} else {
echo "idは $id です。";
}
?>
GETパラメータの「id」を整数として検証し、不正な場合はメッセージを表示します。
POSTデータのサニタイズ
<?php
// フォームからの入力を安全に取得する例
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
echo "ユーザー名は " . htmlspecialchars($username, ENT_QUOTES, 'UTF-8') . " です。";
?>
POSTデータの「username」を文字列としてサニタイズ(不要なタグを除去)し、XSS対策としてHTMLエスケープを行っています。
メールアドレスのバリデーション
<?php
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($email === false) {
echo "正しいメールアドレスを入力してください。";
} else {
echo "入力されたメールアドレスは " . $email . " です。";
}
?>
POSTで送信されたメールアドレスを検証し、不正ならエラーメッセージを表示しています。
関連する関数
filter_var— 変数の値にフィルターを適用するfilter_var_array— 配列の値にフィルターを適用するfilter_input_array— 入力タイプごとに複数の変数をフィルターするhtmlspecialchars— HTML特殊文字をエスケープする
まとめ
filter_input は外部からの入力を安全かつ簡単に取得するための強力な関数です。スーパーグローバル変数を直接操作するよりも安全性が高く、適切なフィルターを使うことで不正なデータの流入を防げます。特にフォームの入力値やURLパラメータの処理には欠かせない機能なので、PHPでセキュアな入力値の取得を行いたい場合は積極的に利用しましょう。
