2008-07-11

【応用その4】FX.php を使ってアンケートフォームを MySQL 対応にしてみる

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 FX.php は MySQL データベースへの接続にも対応しているため、アンケートフォーム作成の延長として、今回は既存のコードに MySQL データベースへのデータ書込機能を実装してみることにします。

 * 操作にあたっては、MySQL Server がインストールされていることが前提となりますので、予め MySQL Server のインストールと、文字化け対策のためにデフォルト文字セット(utf8)が有効になるように設定しておいてください。

 まずは、データベースを準備します。付属の create_table.php の $rootPass に MySQL の root パスワードを設定して同スクリプトを保存し、local の web サーバで実行してみてください。Comment データベース、cgi テーブル、webuser とそのパスワードが生成されます。作成するテーブル列は、create_table.php を参照してください。
 
 以下、次の順に Comment.php へコードを追加していきます。
1.使用するデータベース種別を MySQL にします。
データベース種別

2.接続先の MySQL サーバポート番号を指定します。デフォルトは 3306 です。
MySQL ポート番号

3. あとは既存の FX.php 接続とほぼ同じですが、最後のデータ書き込みのところで、FMNew() の代わりに PerformSQLQuery() 関数を使います。引数は第一パラメータに SQL クエリ文を指定し、残りはデフォルト値を指定します。

 PerformSQLQuery($query,true,false,'object');

 この部分をコードで表したものが次のとおりです。(列名)と値を使って $query SQL クエリ文をセットし、次の PerformSQLQuery で指定して実行します。
query

 FX.php & MySQL の組み合わせで実行可能になっているコードを Comment_mysql.php に用意してありますので、併せて確認してみてください。

参考リンク:
MySQL オフィシャルサイト

2008-07-09

【応用その3】アンケートフォームにセッションを追加してみる(リロード対策)

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 PHP 経由で FileMaker データベースにデータ書込を行う手法として、簡易アンケートフォームの作り方をベースに説明を進めてきました。
 すでにお気付きの方もいらっしゃるとは思いますが、実はこのままでは実際の運用には不向きな部分があります。

 それは、最後のお礼ページです。
 このページが表示される直前に FileMaker データベースへのデータ書込とメール送信を同時に行うわけですが、Web ブラウザのリロードボタンを押してページをロードするたびに同処理が実行されてしまうため、ゴミデータとゴミメールが増えてしまう可能性があります。
 実際問題として、お礼のページをリロードしてしまうユーザも結構多かったりするので、リロード操作が行われてもデータ送信、メール送信は一回だけ実行するような仕組みが必要となります。

 これを効率よく処理する方法として、PHP のセッションをここで組み込んでみることにします。
 PHP のセッションはスーパーグローバル配列と呼ばれ、読み込まれたページにかかわらず値を保持しておくことができるものです。FileMaker のグローバル変数に共通している部分もあるので、そう捉えると理解しやすいと思います。

 ユーザによるページリロード対策は、データ書込とメール送信が行われたかどうかを判断し、それが No なら書込・メール送信を許可、Yes なら不可にすればよいわけです。これをフラグを使って表現するとさらに明確になります。仮にフラグ名 を done フラグとしましょう。

 未書込の状態 --- done フラグはオフ (FALSE、偽)
 書込済の状態 --- done フラグはオン (TRUE、真)

 done フラグがオフ(FALSE)のときに書き込みを実行し、その操作が終わったら done フラグをオン(TRUE) にします。

 この値をセッションに入れておくことで、ページが何度リロードされても呼び出しはセッションから行うため、一度オンになったフラグはオフになることはありません。

 この処理を PHP で記述すると次のようになります。
1. セッションの開始と有効期限を決めます。
セッション開始
 セッションの有効期限のデフォルトは 180 分ですが、簡易アンケートで特に詳細な確認が必要なわけではないため、ここでは有効期限を 5 分にしています。5 分経過するとセッションは破棄されて無効となり、その後にページをリロードすると、白紙のページが表示されるようになります。
 session_start() 関数でセッションを開始するわけですが、この関数は、セッションが存在しない場合は、新たにセッションを作成します。これに対し、セッションがすでに存在している場合はそのセッションを再度呼び出します。つまり、このアンケートフォームで言えば、最初にアンケート入力フォームのロードを行った時点でセッションの作成を行い、それ以降、ページがロードされたり次のステップに進むたびに session_start() 関数から同一のセッションを呼び出すわけです。

2. 次に、done フラグの初期化を行います。
セッション初期化
 初回ページロード時に一度だけ done フラグに FALSE (データベースへの書込とメール送信が行われていない状態)をセットします。

3. お礼のページを出すときに、done フラグが FALSE であることを確認し、それに該当すれば FileMaker データベースへのデータ書込とメール送信を行い、その後に done フラグに TRUE (データベースへの書込とメール送信が完了した状態)をセットします。
 以下、赤線を引いた部分に注目してください(コードが長いため、中略を入れてあります)。
done フラグのセット

 これでセッションの実装が終わりました。サンプルコードを使って動作を確認してみてください。

2008-07-08

SonicWall Total Securityによる回線速度低下

 SonicWall Total Security(以下、SonicWall)を導入し、セキュリティ関連の設定をした後に、回線速度のチェックをすると、導入前に比べて回線速度が低下していることに愕然とするかもしれません。しかし、外部から渡ってきたパケットの精査が SonicWall の機能であり、その精査に費やされる処理時間のことを考慮すれば、回線速度が低下するのは当然と言えば当然なのでしょう。

 以下、SonicWall のセキュリティ機能で、速度低下が著しいものとそうでないものを調べてみました。

  • 導入すると極端に速度が落ちるもの
    アンチスパイウェア
    侵入防御 (IPS)

  • 若干速度が落ちるもの
    電子メールフィルタ
    ゲートウェイ アンチウィルス

  • さほど速度が低下しないもの
    コンテンツフィルタ


 もちろん、セキュリティ対策としてできるだけ多くのサービスを有効にしておくのが望ましいと思いますが、社内で利用しているネットワークサービスが使用に耐えられなくなるほど回線速度が落ちてしまうのでは、あまり実用的ではないでしょう。
 社内のネットワーク運用に最も適したサービス設定を行い、セキュリティをどうしても向上させる必要があるのなら、回線そのものの品質をアップグレードさせるのが現実的な運用方法と言えるかもしれません。