目次
サンプル・プログラムの実行例
サンプル・プログラム
| getParam.php | サンプル・プログラム本体 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.1.0 | 2023/04/22 | 説明用に isButtonDraft(), getParamDraft() 追加 |
| 2.0 | 2022/05/07 | コマンドライン動作対応(CUI版) |
| 1.1 | 2021/02/13 | PHP8対応 |
| 1.0 | 2015/02/15 | 初版 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.0.1 | 2025/08/11 | getParam() bug-fix |
| 2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
| 1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
| 1.8.1 | 2025/03/15 | validRegexPattern() debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
HTTP GETとPOSTの違い
<form method="GET" action="hoge.php">のように記述し、テキストボックスに "abc" と入力して実行ボタンを押下すると、ブラウザに
<input type="text" name="param" id="param">
<input type="submit" name="exec" id="exec" value="実行">
</form>
hoge.php?param=abc&exec=実行が渡る。これが GETメソッドである。"hoge.php" はクエスチョンマーク以降のパラメータを取り出し、処理する。
次に、HTML FORMタグで、
<form method="POST" action="hoge.php">のように記述し、テキストボックスに "abc" と入力して実行ボタンを押下すると、ブラウザには
<input type="text" name="param" id="param">
<input type="submit" name="exec" id="exec" value="実行">
</form>
hoge.phpと表示されるが、前述の GETメソッドと同様、データが "hoge.php" に渡される。URLに表れないだけで、HTTP通信の中にデータが埋め込まれている。これを POSTメソッドと呼ぶ。
PHPは、あらかじめ用意されたスーパーグローバル変数(配列) $_GET にGET方式で渡されたデータを、また、スーパーグローバル変数(配列) $_POST にPOST方式で渡されたデータを格納する。
配列の要素名は、HTML FORMのname属性に対応する。前述の例だと、$_GET['param'] または $_POST['param'] にINPUTタグのデータを、$_GET['exec'] または $_POST['exec'] にボタン(INPUT SUBMIT)のデータを格納する。
解説:指定したボタンが押されたかどうか
getParam.php
131: /**
132: * 指定したボタンが押されたかどうか(ドラフト版)
133: * @param string $btn ボタン名(HTML FORMのname)
134: * @return bool TRUE=押された/FALSE=押されていない
135: */
136: function isButtonDraft($btn) {
137: $param = FALSE;
138: //GETから取得
139: if (isset($_GET[$btn])) $param = TRUE;
140: //POSTから取得
141: else if (isset($_POST[$btn])) $param = TRUE;
142:
143: return $param;
144: }
処理としては、まず、スーパーグローバル変数 $_GET、$_POST の順に、 $btn と一致するキーがあるかどうかを調べる。
いずれかに一致すれば TRUEを、一致しなければ FALSEを返す。
解説:パラメータを取り出す
getParam.php
146: /**
147: * HTML FORMで指定したINPUTの内容を取り出す.(ドラフト版)
148: * @param string $key パラメータ名(省略不可)(HTML FORMのname)
149: * @return string パラメータ/NULL=パラメータ無し
150: */
151: function getParamDraft($key) {
152: $param = '';
153: //GETから取得
154: if (isset($_GET[$key])) $param = $_GET[$key];
155: //POSTから取得
156: else if (isset($_POST[$key])) $param = $_POST[$key];
157: //文字コード変換(エンコード選定は自動)
158: $param = mb_convert_encoding($param, INTERNAL_ENCODING, 'auto');
159:
160: return $param;
161: }
処理は、isButtonDraft とほぼ同じである。
スーパーグローバル変数から取り出した値は、 mb_convert_encoding 関数を使って内部文字エンコードに自動変換する。
解説:コマンドラインから起動されたかどうか
pahooInputData.php
111: /**
112: * コマンドラインから起動されたかどうかを求める.
113: * @参考URL https://www.pahoo.org/e-soul/webtech/php01/php25-01.shtm
114: * @return bool TRUE=コマンドライン起動である/FALSE=でない
115: */
116: function isCommandLine() {
117: global $argv;
118:
119: $res = FALSE;
120: if (isset($argv)) {
121: $info = pathinfo($argv[0]);
122: if ($info['basename'] == MYSELF) {
123: $res = TRUE;
124: }
125: }
126:
127: return $res;
128: }
一般に、PHPスクリプトをコマンドラインから起動すると、グローバル配列変数 $argv にコマンドライン・パラメータがセットされる。最初の要素には自身のスクリプト・ファイル名が入るので、これをチェックしてコマンドラインから起動されたかどうかを判定する。
解説:isButton,getParamの使い方
GET や POST の値を受け取るのに、スーパーグローバル変数 $_GET、$_POST を使うのではなく、組み込み関数 filter_input を使うように改めた。これは、$_GET、$_POST は代入が可能なため、参照前に内容が変更される可能性があるためである。
これからよく使うことになるので、別ファイル "pahooInputData.php" に分離し、メインプログラム側で require_once で読み込むようにする。
pahooInputData.php
130: /**
131: * HTML FORMで指定したボタンが押されたかどうかを求める.
132: * filter_input()関数および $argv を参照する.
133: * @参考URL https://www.pahoo.org/e-soul/webtech/php01/php25-01.shtm
134: * @param string $btn ボタン名(省略不可)(HTML FORMのname)
135: * @param bool $ignoreCase TRUE:大文字小文字を無視/FALSE:無視しない
136: * @param bool $shorted TRUE:CUIで短縮形を使う/使わない
137: * 短縮形の例 --help, -h
138: * @return bool TRUE=押された/FALSE=押されていない
139: */
140: function isButton($btn, $ignoreCase=FALSE, $shorted=TRUE) {
141: global $argv;
142:
143: $param = FALSE;
144: // GETから取得
145: if ((filter_input(INPUT_GET, $btn) != NULL) || (isset($_GET[$btn]))) {
146: $param = TRUE;
147: // POSTから取得
148: } else if ((filter_input(INPUT_POST, $btn) != NULL) || (isset($_POST[$btn]))) {
149: $param = TRUE;
150: } else if (isset($_POST[$btn])) {
151: $param = TRUE;
152: // コマンドラインから取得
153: } else if (isCommandLine()) {
154: foreach ($argv as $str) {
155: if ($str == ('--' . $btn)) {
156: $param = TRUE;
157: break;
158: // 短縮形
159: } else if ($shorted && ($str == ('-' . substr($btn, 0, 1)))) {
160: $param = TRUE;
161: break;
162: }
163: }
164: }
165:
166: // 大文字・小文字を無視
167: if (!$param && $ignoreCase) {
168: $btn = mb_strtoupper($btn);
169: // GETから取得
170: if (($arr = filter_input_array(INPUT_GET)) != NULL) {
171: foreach ($arr as $key=>$val) {
172: if (mb_strtoupper($key) == $btn) {
173: $param = TRUE;
174: break;
175: }
176: }
177: }
178: // POSTから取得
179: if (($arr = filter_input_array(INPUT_POST)) != NULL) {
180: foreach ($arr as $key=>$val) {
181: if (mb_strtoupper($key) == $btn) {
182: $param = TRUE;
183: break;
184: }
185: }
186: }
187: // コマンドラインから取得
188: if (!$param && isset($argv)) {
189: foreach ($argv as $str) {
190: if (mb_strtoupper($str) == ('--' . $btn)) {
191: $param = TRUE;
192: break;
193: // 短縮形
194: } else if ($shorted && (mb_strtoupper($str) == ('-' . substr($btn, 0, 1)))) {
195: $param = TRUE;
196: break;
197: }
198: }
199: }
200: }
201:
202: return $param;
203: }
name属性またはコマンドライン・オプション文字列の大文字・小文字を無視したいときは $ignoreCas に TRUE を、そうでないときは FALSE を代入する。
CUIでコマンドライン・オプション文字列の短縮形を使いたいときは $shorted に TRUE を、そうでないときは FALSE を代入する。短縮形とは、コマンドライン・オプション文字列の先頭1文字を指す。たとえば、オプション --help の短縮形は -h である。
コマンドライン起動の場合(isCommandLine が TRUE)なら、グローバル変数 $argv に '--' + $btn と一致する要素があるかどうかを調べる。短縮形が指定された場合は、$btn の冒頭1文字を切り出して比較する。
大文字・小文字を無視する場合の処理だが、$_GET、$_POST、$argv のすべてについて、組み込み関数 mb_strtoupper を使って大文字に変換してから比較を行う。
pahooInputData.php
130: /**
131: * HTML FORMで指定したボタンが押されたかどうかを求める.
132: * filter_input()関数および $argv を参照する.
133: * @参考URL https://www.pahoo.org/e-soul/webtech/php01/php25-01.shtm
134: * @param string $btn ボタン名(省略不可)(HTML FORMのname)
135: * @param bool $ignoreCase TRUE:大文字小文字を無視/FALSE:無視しない
136: * @param bool $shorted TRUE:CUIで短縮形を使う/使わない
137: * 短縮形の例 --help, -h
138: * @return bool TRUE=押された/FALSE=押されていない
139: */
140: function isButton($btn, $ignoreCase=FALSE, $shorted=TRUE) {
141: global $argv;
142:
143: $param = FALSE;
144: // GETから取得
145: if ((filter_input(INPUT_GET, $btn) != NULL) || (isset($_GET[$btn]))) {
146: $param = TRUE;
147: // POSTから取得
148: } else if ((filter_input(INPUT_POST, $btn) != NULL) || (isset($_POST[$btn]))) {
149: $param = TRUE;
150: } else if (isset($_POST[$btn])) {
151: $param = TRUE;
152: // コマンドラインから取得
153: } else if (isCommandLine()) {
154: foreach ($argv as $str) {
155: if ($str == ('--' . $btn)) {
156: $param = TRUE;
157: break;
158: // 短縮形
159: } else if ($shorted && ($str == ('-' . substr($btn, 0, 1)))) {
160: $param = TRUE;
161: break;
162: }
163: }
164: }
165:
166: // 大文字・小文字を無視
167: if (!$param && $ignoreCase) {
168: $btn = mb_strtoupper($btn);
169: // GETから取得
170: if (($arr = filter_input_array(INPUT_GET)) != NULL) {
171: foreach ($arr as $key=>$val) {
172: if (mb_strtoupper($key) == $btn) {
173: $param = TRUE;
174: break;
175: }
176: }
177: }
178: // POSTから取得
179: if (($arr = filter_input_array(INPUT_POST)) != NULL) {
180: foreach ($arr as $key=>$val) {
181: if (mb_strtoupper($key) == $btn) {
182: $param = TRUE;
183: break;
184: }
185: }
186: }
187: // コマンドラインから取得
188: if (!$param && isset($argv)) {
189: foreach ($argv as $str) {
190: if (mb_strtoupper($str) == ('--' . $btn)) {
191: $param = TRUE;
192: break;
193: // 短縮形
194: } else if ($shorted && (mb_strtoupper($str) == ('-' . substr($btn, 0, 1)))) {
195: $param = TRUE;
196: break;
197: }
198: }
199: }
200: }
201:
202: return $param;
203: }
受け取ったデータの文字エンコードを自動的に内部エンコードに変換したいときは、$auto に TRUE を、そうでないときは FALSE を代入する。この引数を省略した場合には自動変換を行う。
オブジェクトに値が入っていないとき、デフォルト値として受け取りたい値があれば、$def にその値をセットする。$def に NULL; をセットするが、この引数を省略した場合にはデフォルト値はないものとみなす。
name属性またはコマンドライン・オプション文字列の大文字・小文字を無視したいときは $ignoreCas に TRUE を、そうでないときは FALSE を代入する。
CUIでコマンドライン・オプション文字列の短縮形を使いたいときは $shorted に TRUE を、そうでないときは FALSE を代入する。
また、引数 [$trim] によって、受け取ったデータの冒頭・末尾の空白を除くことができるようにした。ユーザー入力では、多くの場合、冒頭・末尾に空白を入力することはなく、逆に、入力ミスで空白を入れてしまうケースが多いからだ。
全角空白文字が含まれている可能性を考慮し、組み込み関数 preg_replace によって空白文字を除去素いる。PHP8.x以上であれば、マルチバイト文字に対応した組み込み関数 mb_trim を利用できる。
コマンドラインでオプションを指定するときは、
php getParam.php --param=12345のようにする。短縮オプションは
php getParam.php -p=12345である。
コマンドライン・オプションから値を取り出すために explode を利用している。
解説:issetとempty関数の違い
empty関数は、変数が〈空〉であるかどうかを検査します。変数が〈空〉である場合は、
- ""(空文字)
- 0(整数0)
- 0.0(浮動小数点0)
- "0"(文字列 "0")
- NULL
- FALSE
- 空配列 []
empty関数は、式 !isset($var) |
| $i | isset($i) | empty($i) |
|---|---|---|
| (未定義) | FALSE | TRUE |
| NULL | FALSE | TRUE |
| 空文字 "" | TRUE | TRUE |
| 0(整数0) | TRUE | TRUE |
| 0.0(浮動小数点0) | TRUE | TRUE |
| "0"(文字列 "0") | TRUE | TRUE |
| FALSE | TRUE | TRUE |
| 空配列 [] | TRUE | TRUE |
参考サイト
- PHPでGET/POSTでフォームから値を受け取る(その2):ぱふぅ家のホームページ

そこで今回は、GET/POSTのどちらからでもデータを受け取ることができ、PHPをコマンドラインで使うときにも利用でき、日本語にも対応する汎用ユーザー関数を作ってみることにする。
(2025年10月9日)記事「解説:issetとempty関数の違い」追記
(2025年7月26日)getParam() 引数に$trim追加