【PHP8.x】filter_has_var関数の使い方

filter_has_var関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

filter_has_var関数は、指定された型の変数(例えば、INPUT_GET、INPUT_POST、INPUT_COOKIE、INPUT_SERVER、INPUT_ENV、INPUT_SESSION、INPUT_REQUEST)が存在するかどうかをチェックする関数です。システムエンジニアを目指す初心者の方にとって、この関数はユーザーからの入力やサーバー環境変数などが存在するかどうかを検証する際に非常に役立ちます。

具体的には、filter_has_var(int $type, string $variable_name): bool という形式で使用します。$type は入力変数の型(例えば INPUT_GETINPUT_POST など)を指定し、$variable_name は変数名を文字列で指定します。

この関数は、指定された型の変数に、指定された名前の変数が存在する場合に true を返し、存在しない場合には false を返します。

例えば、filter_has_var(INPUT_GET, 'name') は、GETリクエストの中に 'name' という名前の変数が存在するかどうかをチェックします。Webアプリケーションにおいて、フォームから送信されたデータやURLパラメータなどが想定通りに存在するかを確認するために利用されます。

入力されたデータが存在するかどうかを事前に確認することで、存在しない変数にアクセスしようとして発生するエラーを回避し、より安全で安定したWebアプリケーションを開発することができます。また、入力値の検証を行う前段階として、そもそも入力が存在するかを確認する目的にも利用できます。

構文(syntax)

1filter_has_var(int $type, string $var_name): bool

引数(parameters)

int $input_type, string $var_name

  • int $input_type: チェックする変数の種類を指定する整数。例: INPUT_GET, INPUT_POST, INPUT_COOKIE など。
  • string $var_name: チェックする変数の名前を指定する文字列。

戻り値(return)

bool

指定された名前の変数が、指定されたフィルタータイプで存在するかどうかを示す真偽値を返します。

サンプルコード

PHP filter_has_var による変数存在チェック

1<?php
2
3/**
4 * filter_has_var 関数の使用例
5 *
6 * この関数は、指定された種類の外部変数(GET、POST、COOKIE、ENV、SERVER)に、
7 * 特定の名前の変数が存在するかどうかをチェックします。
8 * 主にユーザーからの入力(URLパラメータやフォームデータ)が存在するかを
9 * 確認する際に利用されます。
10 *
11 * @param int $input_type 調べたい入力変数のタイプ (例: INPUT_GET, INPUT_POST)
12 * @param string $var_name 変数の名前
13 * @return bool 変数が存在すれば true、そうでなければ false
14 */
15
16// 1. GET変数 'user_id' が存在するかどうかを確認
17//    ウェブサーバーでこのスクリプトを 'http://localhost/script.php?user_id=123' のように
18//    実行した場合に 'true' を返すシナリオを想定しています。
19//    ここでは、存在しないケースと存在するケースの両方をデモンストレーションします。
20
21echo "--- GET変数 'user_id' の確認 ---\n";
22
23// 最初のチェック: デフォルトでは 'user_id' は存在しないはず(CLI実行時やURLパラメータがない場合)
24if (filter_has_var(INPUT_GET, 'user_id')) {
25    echo "GET変数 'user_id' が存在します。\n";
26} else {
27    echo "GET変数 'user_id' は存在しません。\n";
28}
29
30// デモンストレーションのため、GET変数をプログラム的にシミュレートします。
31// 実際のウェブ環境では、この部分はURLパラメータやフォーム送信によって自動的に行われます。
32$_GET['user_id'] = '456';
33
34echo "\n--- GET変数 'user_id' をシミュレート後に再確認 ---\n";
35if (filter_has_var(INPUT_GET, 'user_id')) {
36    echo "GET変数 'user_id' が存在します。\n";
37    // 変数が存在することを確認した後、filter_input() などで値を取得・フィルタリングできます。
38    $userId = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_NUMBER_INT);
39    echo "取得された user_id: " . ($userId ?? 'N/A') . " (フィルタリング済み)\n";
40} else {
41    // このメッセージは、シミュレーションが行われたため、表示されません。
42    echo "GET変数 'user_id' は存在しません。\n";
43}
44
45echo "\n----------------------------------------\n";
46
47// 2. 環境変数 'PATH' が存在するかどうかを確認
48//    'PATH' は多くのシステムで設定されている環境変数であるため、通常は true を返します。
49echo "--- 環境変数 'PATH' の確認 ---\n";
50if (filter_has_var(INPUT_ENV, 'PATH')) {
51    echo "環境変数 'PATH' が存在します。\n";
52    // 環境変数の値を取得し、表示
53    $path = filter_input(INPUT_ENV, 'PATH', FILTER_SANITIZE_SPECIAL_CHARS);
54    echo "PATH変数の一部: " . substr($path ?? '', 0, 50) . "...\n";
55} else {
56    echo "環境変数 'PATH' は存在しません。\n";
57}
58
59echo "\n----------------------------------------\n";
60
61// 3. 存在しないGET変数の確認
62echo "--- 存在しないGET変数 'non_existent_param' の確認 ---\n";
63if (filter_has_var(INPUT_GET, 'non_existent_param')) {
64    echo "GET変数 'non_existent_param' が存在します。\n";
65} else {
66    echo "GET変数 'non_existent_param' は存在しません。\n";
67}
68
69?>

PHPのfilter_has_var関数は、指定された種類の外部変数に、特定の名前の変数が存在するかどうかを安全に確認するために使用されます。主にウェブアプリケーションで、URLパラメータやフォームデータなどのユーザーからの入力が存在するかをチェックする際に役立ちます。

この関数は二つの引数を取ります。最初の引数$input_typeには、調べたい入力変数の種類を整数値で指定します。例えば、URLのクエリパラメータであればINPUT_GET、HTMLフォームからのPOSTデータであればINPUT_POSTといったPHPが提供する定数を使用します。二番目の引数$var_nameには、存在を確認したい変数の名前を文字列で渡します。

戻り値はブール値で、指定された種類の外部変数にその名前の変数が存在すればtrueを、存在しなければfalseを返します。

サンプルコードでは、まずINPUT_GETを使ってuser_idというGET変数の存在を確認しています。初期状態ではfalseとなりますが、プログラム内で$_GET['user_id']を設定してシミュレートすると、その後trueを返し、変数が存在することが確認できます。存在が確認された後、filter_inputのような関数でその値を取得し、さらにフィルタリングを行うことができます。また、INPUT_ENVを使って環境変数PATHの存在を確認する例や、存在しないGET変数をチェックする例も示されており、filter_has_varの基本的な使い方が網羅されています。この関数を利用することで、未定義の変数にアクセスしようとした際のエラーを防ぎ、堅牢なコードを書く手助けとなります。

filter_has_var関数は、指定した外部変数が「存在するかどうか」を確認するもので、その値が空でないかや、正しい形式であるかまではチェックしません。そのため、変数の値を取得したり、安全に利用したりする際には、filter_input関数などを組み合わせて値の検証やサニタイズを行うことが非常に重要です。

サンプルコード内で$_GETを直接変更している部分は、関数の動作を説明するための便宜的なデモンストレーションであり、実際のWebアプリケーション開発において、開発者がスーパーグローバル変数を直接書き換えることは通常ありませんのでご注意ください。

この関数は、Webサーバー環境でURLパラメータやフォーム入力の有無を事前に確認する際に役立ちます。コマンドラインからの実行では、INPUT_GETやINPUT_POSTなどの入力タイプは通常存在しないため、常にfalseを返すことが多い点も理解しておく必要があります。

関連コンテンツ