FormKit(フォームキット):設定ファイル詳細

フォームの動作には、必ず一箇所設置につき1つの設定ファイル formkit/config.php が必要です。中身はPHPなので、ここにPHPプログラムを書くことも可能です。
以下、設定ファイルに記述できるすべての項目の説明を記述します。

メール送信設定

冒頭の namespace FK; は削除しないようにご注意下さい。


namespace FK;

/**
 * メール送信設定
 * -------------------------------------------------------------------------------------------------
 */

# - お客様へ
$Config['mails'][] = [
	'template'         => 'mail_to_user.php',
	'subject'          => 'お問い合せありがとうございました。',
	'from'             => '事務局 <webmaster@example.jp>',
	'to'               => '{$onamae} 様 <{$email}>',
	'bcc'              => null,
	'reply_to'         => null,
	'is_html'          => false,
	'is_utf8'          => false,
	'attach_upfile'    => false,
	# - SMTP送信設定
	// 'smtp_auth'        => true,
	// 'smtp_host'        => 'smtp.xxxxx',
	// 'smtp_port'        => 587,
	// 'smtp_user'        => 'xxxxxxxx',
	// 'smtp_pass'        => 'xxxxxxxx',
	// 'smtp_secure'      => 'tls', # null | 'tls' | 'ssl'
];

# - 事務局へ
$Config['mails'][] = [
	'template'         => 'mail_to_admin.php',
	'subject'          => 'お問い合せがありました。',
	'from'             => '{$onamae} 様 <{$email}>',
	'to'               => '事務局 <webmaster@example.jp>',
	'bcc'              => null,
	'reply_to'         => null,
	'is_html'          => false,
	'is_utf8'          => false,
	'attach_upfile'    => true,
	# - SMTP送信設定
	// 'smtp_auth'        => true,
	// 'smtp_host'        => 'smtp.xxxxx',
	// 'smtp_port'        => 587,
	// 'smtp_user'        => 'xxxxxxxx',
	// 'smtp_pass'        => 'xxxxxxxx',
	// 'smtp_secure'      => 'tls', # null | 'tls' | 'ssl'
];

			

メール送信の設定を行います。$Config['mails'][] = [~];のブロックを増やすことでメール送信先を追加することもできます。 また、メール設定の値には {$onamae} のように、入力された値を差し込んで利用することも可能です。

設定キー 解説
template メールの内容となるメールテンプレートファイル名を記述します。このファイルは config.php と同じ場所に配置してください。
subject メールの件名を記述して下さい。
from 送信者のメールアドレスを記述して下さい。xxx@xxx.xxx または 送信者名 <xxx@xxx.xxx> の形式で記述可能です。
to 宛先のメールアドレスを記述して下さい。xxx@xxx.xxx または お客様名 <xxx@xxx.xxx> の形式で記述可能です。また、PHP配列で複数指定可能です。※
bcc BCC先のメールアドレスを記述して下さい。また、PHP配列で複数指定可能です。※
reply_to 返信先のメールアドレスを記述して下さい。
is_html true に設定することで、HTMLメールを送信できます。通常は false です。template で指定したファイルをHTMLメールとして作成してください。
is_utf8 true に設定すると文字エンコード形式UTF-8でメールを送信します。通常は false で、文字コードはJIS(ISO-2022JP)です。UTF-8に設定することでUTF-8絵文字(😽←こんなの)が送信できるようになりますが、受信側がUTF-8絵文字に対応していないメーラーですと表示できませんのでご注意ください。ちなみに、標準の文字コードJISでUTF-8絵文字を送信すると「?」に変換されて送信されます。また、null を指定するとメール本文にUTF-8がある場合のみUTF-8モードになります。(ver 1.2.9より)
attach_upfile フォームでアップロードしたファイルを添付するかどうかの設定です。true に設定した場合、この設定したメールにファイルとして添付されます。複数のアップロードファイルがあれば複数のファイルが添付されます。通常、フォーム送信者に添付する必要ないかと思いますので、事務局側に届くメール設定にのみ true にするといいでしょう。
smtp_auth sendmailではなくSMTP接続によるメール送信を行う場合、true に設定して下さい。特殊なサーバだったりスパムメール判定されやすかったりする場合は、SMTP接続による送信をおすすめします。
smtp_host SMTPホスト名を記述して下さい。
smtp_port SMTPポート番号を記述して下さい。
smtp_user SMTPユーザー名を記述して下さい。
smtp_pass SMTPパスワードを記述して下さい。
smtp_secure SMTP通信方式を記述して下さい。tls または ssl が指定可能です。

※メールアドレスをPHP配列で複数指定する場合、例えば以下のような書き方で対応できます。

'to' => ['office@example.jp', '{$email}'],
'bcc' => ['shop3@example.jp', '渋谷支店 <shop4@example.jp>'],

バリデート設定

/**
 * バリデート設定
 * -------------------------------------------------------------------------------------------------
 */
$Config['validate'] = [

	# - 各要素のバリデート
	'list' => [
		'onamae'    => REQ(),
		'kana'      => REQ() -> KATA(),
		'email'     => REQ() -> EMAIL(1),
		'email2'    => REQ() -> SAME('email'),
		'zip'       =>          ZIP(),
		'pref'      =>          PREF(),
		'address1'  =>          null,
		'address2'  =>          null,
		'tel'       => REQ() -> TEL(),
		'type'      => REQ() -> ERRORSET('いずれか選択してください。'),
		'comment'   => REQ() -> LENGTH(500),
	],

	# - 全ての要素に最初に実行する共通メソッド
	'before' => CONV('KV'), // 標準で半角カナ→全角カナ

	# - 全ての要素の最後に実行する共通メソッド
	'after'  => LENGTH(100), // 標準で最大100文字迄
];
			

要素ごとのバリデート(入力チェック)のルールを定義します。例えば必須項目なら REQ() 、文字数の制限をしたい場合は LENGTH() などのバリデートメソッドを、-> で繋げて入力時のルールを記述していきます。リアルタイムバリデートや送信直前などに、実際に入力された値が正しい値かをチェックする(バリデートする)ための設定ですので、適切に設定するようにしてください。
また、通常の項目名は英字数字で始まるもので、<input neme="~"> 等の name で指定する要素名と同名にしてください。また、アンダーバーから始まる項目名は サブバリデート といって複数の要素をまとめてチェックしたい場合に利用できます。詳細は バリデートメソッド をご参照下さい。

設定キー 解説
list 要素ごとにバリデートメソッドを記述します。※後述
before 全ての要素で最初に実行する共通のバリデートメソッドを記述します。
after 全ての要素で最後に実行する共通のバリデートメソッドを記述します。

バリデートの定義は以下のような形式で記述します。

'要素名' => バリデート1() -> バリデート2() -> バリデート3() ... ,

例えば、上記の例で言うと、'onamae' => REQ(), は、入力要素 <input name="onamae"> を入力必須項目にするバリデートです。特にルールの必要がない場合は null と記述して下さい。
また、バリデートメソッドは必要なだけ -> で繋げていけます。例えば、'email2' => REQ() -> SAME('email'), は、要素 email2 は必須でさらに別の要素 email と同じ値でなければならない、というバリデートです。
尚、バリデートメソッドの一覧は別途ページに掲載しております。

バリデートの実行は -> で繋いだ順に実行されますが、REQ() が指定されている場合のみ、最後にも再度 REQ() チェックが入ります。
また、config.php ファイルにて beforeafter を設定している場合、前後にそのバリデートメソッドも実行されます。つまり、上記 email2 が実際にバリデート実行される際には、CONV('KV') -> REQ() -> SAME('email') -> REQ() -> LENGTH(100) といった実行内容になります。

CSV出力設定

/**
 * CSV出力設定
 * -------------------------------------------------------------------------------------------------
 */
$Config['csv'] = [
	# - 保存CSVファイル名
	'file' => '../csv/'.(run_date('Y-m')).'.csv.cgi',
	# - 保存先のディレクトリに.htaccessが無ければアクセス禁止のhtaccessを新規作成する。
	'dir_deny' => true,
	# - CSVの内容定義
	'list' => [
		'送信日付'           => '{$__DATE__}', # または run_date('Y-m-d') 等
		'送信時間'           => '{$__TIME__}', # または run_date('H:i:s') 等
		'お名前'             => '{$onamae}',
		'メールアドレス'     => '{$email}',
		'連絡先電話番号'     => '{$tel}',
		'郵便番号'           => '{$zip}',
		'都道府県'           => '{$pref}',
		'市区町村/番地'      => '{$address1}',
		'建物名/階'          => '{$address2}',
		'お問い合わせタイプ' => '{$type}',
		'お問い合わせ内容'   => '{$comment}',
	],
];
			

設定すると、フォームで入力された情報をCSVファイルに保存しておくことが可能です。

設定キー 解説
file 保存するCSVファイル名です。上記のように run_date('Y-m')などPHPを噛ませて日時で分ける事もできます。run_date()関数はPHPの実行時の時刻を返す関数で、引数はPHP関数 date() と同様のものが使えます。
dir_deny true に設定すると、CSVの保存先のディレクトリに、ウェブアクセスを禁止にするための .htaccess を自動的に作成します。是非設定すべきですが、当然ながらフォームページと同じディレクトリにCSVファイルを出力する場合は false にしてください。
list CSVに出力する各列データの定義です。'(列名)' => '{$要素名}',のように記述して下さい。{$onamae->tail(' 様')}のようにテンプレートメソッドを使用することも可能です。

CSV出力を無効にする場合は、この設定ごと削除・またはコメントアウトして下さい。

/**
 * CSV出力設定
 * -------------------------------------------------------------------------------------------------
 */
// $Config['csv'] = [
// 	# - 保存CSVファイル名
// 	'file' => '../csv/'.(run_date('Y-m')).'.csv.cgi',
// 	# - 保存先のディレクトリに.htaccessが無ければアクセス禁止のhtaccessを新規作成する。
// 	'dir_deny' => true,
// 	# - CSVの内容定義
...
(略)
			

送信カウント設定

/**
 * 送信カウント設定
 * -------------------------------------------------------------------------------------------------
 */
$Config['count'] = [
	# - 送信カウント値保存ファイル
	'file' => '../count/count.cgi',
	# - 保存先のディレクトリに.htaccessが無ければアクセス禁止のhtaccessを新規作成する。
	'dir_deny' => true,
];
			
設定キー 解説
file 送信カウント値を保存するファイル名です。
dir_deny true に設定すると、CSVの保存先のディレクトリに、ウェブアクセスを禁止にするための .htaccess を自動的に作成します。是非設定すべきですが、当然ながらフォームページと同じディレクトリにカウンタファイルを生成する場合は false にしてください。

この設定が有効な場合、特殊変数 $__COUNT__ が使用可能になり、送信カウント値に置き換わります。必要が無い場合は、 $Config['counter'] ごと削除またはコメントアウトしておいてください。

オプションURL設定

/**
 * オプションURL設定
 * -------------------------------------------------------------------------------------------------
 */
# - 再入力用URL(JSが無効な場合など、入力値がエラーなのに送信プログラムに来た場合に強制移動するURL)
$Config['reinput_url'] = './';

# - 強制完了画面URL(メール配信後、通常は環境変数REQUEST_URIにジャンプしますが、 REQUEST_URIがうまく取得できない場合や完了画面を別のURLにしたい場合に指定して下さい。)
// $Config['finish_url'] = './message.php';
			
設定キー 解説
reinput_url JavaScriptが無効な場合など、リアルタイムバリデートが実行されないまま次の画面へ進み、入力値のバリデートでエラーが発生した場合に強制移動するURL先を指定します。通常は入力フォームのURLでいいかと思います。この設定行をコメントアウトまたは削除した場合、再入力画面は表示されず、専用のエラー画面が表示されます。
finish_url 通常、送信完了後は fk-send.php をロードしているPHPがそのまま完了画面になるのですが、このURLを設定すると fk-send.php をロードしているPHPで送信処理が終わった後、指定のURLにGETリダイレクトします。通常は設定の必要はありません。尚、環境変数 REQUEST_URI が正しく取得できないサーバの場合も設定する必要があります。

各種文字エンコード設定

/**
 * 各種文字エンコード設定
 * -------------------------------------------------------------------
 * 参照:http://php.net/manual/ja/mbstring.supported-encodings.php
 * ※config.phpや、システムPJPファイルの文字エンコードはUTF-8から変更しないでください。
 */
$Config['charset'] = [
	# - フォームPHPファイルの文字エンコード(標準は 'UTF-8')
	'form_template' => 'UTF-8',
	# - メールテンプレートPHPファイルの文字エンコード(標準は 'UTF-8')
	'mail_template' => 'UTF-8',
	# - CSVファイルの出力文字エンコード(標準は 'SJIS-win')
	'csv_output'    => 'SJIS-win',
];
			
設定キー 解説
form_template フォームPHP(index.phpcheck.phpthanks.php等)の文字エンコードを指定して下さい。通常は UTF-8 を推奨します。
mail_template メールテンプレート(formkit/mail_to_user.php等)の文字エンコードを指定して下さい。通常は UTF-8 を推奨します。
csv_output 出力するCSVファイルの文字エンコードを指定して下さい。通常は SJIS-win を推奨しますが、CSVファイルを開く環境によっては UTF-8 の場合もありますのでご確認の上設定して下さい。

フォームテンプレート、メールテンプレート、CSVファイルの出力、それぞれの文字コードを指定することが出来ます。尚、指定できる文字エンコードの種類は、PHP公式:サポートされる文字エンコーディング に記載のあるもののみとなります。但し、PHPプログラム本体は UTF-8 のまま変更しないようにしてください。

未入力時の表示文字設定

/**
 * 未入力時の表示文字設定
 * -------------------------------------------------------------------------------------------------
 * - HTML可
 * ※メール文中ではHTMLタグは除去されます。CSVの際は空欄になります。
 */
$Config['empty_label'] = '<span class="fk-empty-label">(未入力)</span>';
			

必須項目でない場合など、入力データが空っぽの場合に、確認画面やメールで替りに出力される文字です。未指定の場合は、自動的に <span class="fk-empty-label">(未入力)</span> に設定されます。また、メールに差し込まれる場合はHTMLタグは自動的に除去されます。さらに、CSVに出力される場合はこの文字は使われず、空欄になります。どのテンプレートでも空欄にしたい場合は、$Config['empty_label'] = '' としてください。

セキュリティ設定

/**
 * セキュリティ設定
 * -------------------------------------------------------------------------------------------------
 */
$Config['security'] = [

	// trueの場合、SSLでアクセスされている場合にのみCookieを発行します。SSL未対応のドメインの場合はfalseにしてください。
	'ssl_cookie' => false,

	// trueの場合、自動的・強制的に http→https にジャンプします。SSL未対応のドメインの場合はfalseにしてください。
	'ssl_redirect' => false,

	// trueの場合、X-XSS-Protection, X-Frame-Options, X-Content-Type-Options 全て出力しセキュアにします。trueを推奨しますが、サーバ側でも出力されている場合は重複の警告が出る場合もありますので、その際は個別指定して下さい。
	'security_headers' => true,
	// 'security_header_xss_protection' => true,
	// 'security_header_frame_options' => true,
	// 'security_header_content_type_options' => true,

	// trueの場合、X-XSS-Protection, X-Frame-Options, X-Content-Type-Options を出力しセキュアにします。trueを推奨します。
	'security_headers' => true,

	// CSRF対策を有効にする場合はキー名を入力してください。入力画面で必要な情報がセットされ、送信時に値が検証されるようになります。
	'csrf' => 'fk-csrf-token',

	// ブラウザのユーザーエージェントに指定文字が入っている場合は送信しません。正規表現で指定してください。(ボット対策等)
	'ua_allow_regex' => '/robot/i',

	// 入力データにマルチバイト文字(全角、日本語、記号など)が一つもない場合は送信しないようにします。(海外SPAM対策)
	'need_multibyte' => true,

	// 指定のIPの場合は送信しないようにします。(送信時にエラー画面が表示されます)
	'deny_ips' => [
		'127.0.0.1',
		'192.168.0.1',
	],

	// 指定の秒数を待たないと同一IPから再度送信できないようにします。再送可能になる待ち秒数を指定して下さい。(連続送信スパム対策)
	// ※同サーバに複数FormKitを設置している場合でも、同じIPログファイルを参照します。
	'sendable_latency_sec' => 30,
];
			
設定キー 解説
ssl_cookie true の場合、SSLでアクセスされている場合にのみCookieを発行します。SSL未対応のドメインの場合は false にしてください。
ssl_redirect true の場合、自動的・強制的に http→https にジャンプします。SSL未対応のドメインの場合は false にしてください。
no_cache_headers true の場合、Pragma, Cache-Control, Expires を出力しローカルキャッシュを無効にします。 true を推奨します。
security_headers true の場合、X-XSS-Protection, X-Frame-Options, X-Content-Type-Options を出力しセキュアにします。 true を推奨します。
尚、個別に指定したい場合は security_headersfalse にし、それぞれ以下を設定して下さい。
- security_header_xss_protection
- security_header_frame_options
- security_header_content_type_options
csrf CSRF対策を有効にする場合はキー名を入力してください。入力画面で必要な情報がセットされ、送信時に値が検証されるようになります。
ua_deny_regex ブラウザのユーザーエージェントに指定文字が入っている場合は送信しません。正規表現で指定してください。(ボット対策等)
need_multibyte 入力データにマルチバイト文字(全角、日本語、記号など)が一つもない場合は送信しないようにします。(海外SPAM対策)
deny_ips 指定のIPの場合は送信しないようにします。(送信時にエラー画面が表示されます)
sendable_latency_sec 指定の秒数を待たないと同一IPから再度送信できないようにします。再送可能になる待ち秒数を指定して下さい。(連続送信スパム対策)
※同サーバに複数FormKitを設置している場合でも、同じIPログファイルを参照します。

SSLを導入していない場合は ssl_cookie 及び ssl_redirectfalse にする必要があります。但し、SSLドメインが有効な場合でも、PHP側でSSL認識できない一部のレンタルサーバなどは ssl_redirectfalse にする必要がある場合があります。(でないと、SSLなのにSSLじゃないと認識され無限にリダイレクトしてしまいます)