2008-06-30

FileMaker API for PHP を使ったアンケートフォーム作成 (1/4)

 本記事は2008年に FileMaker 9 の環境下で執筆されました。2016年11月現在、FileMaker の最新バージョンは 15 となっていますが、15 においても本記事の内容はなお有効と思われます。
 一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。

 参考: アンケートシステム・プロトタイプ


ブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し。ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。
 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
 さて、前回の投稿FileMaker Server 9 のインストールを終えましたので、これから数回にわたって FMS9 に装備されている FileMaker API for PHP を使うことによって FileMaker データベースにデータ書き込みを行う方法について説明します。
 ここでは最も手っ取り早く操作を理解することを目標に掲げていますが、今後は機会を見て同操作の Fx.php への展開、MySQL への展開、セッション管理などについても書いていきたいと思っております。

 FileMaker API for PHP は、PHP スクリプトから FileMaker データベースにアクセスすることによって、データベース操作を実現するクラスをまとめた API で、従来の CDML やインスタント Web 公開では機能的に限界のあったデータベース操作がさらに高度で柔軟なものになっています。
 操作にあたってはどうしても HTML と PHP を記述するための知識が必要になるわけですが、今回は理解の最短コースを目指し、最も単純な操作方法をコード付きで紹介します。

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

 こんなページを想像してみましょう。

  1. アンケート入力ページが出てくる。

  2. 上記で正しい入力が行われると、確認ページが出てくる。

  3. 確定ボタンを押すと、入力されたデータが FileMaker データベースに書き込まれるとともに、その内容がメールで投稿者およびサーバ管理者に送信される。


 この動作を実現させたものがこちらのアンケート入力ページです。

入力→確認→データ書込(必要に応じてメール送信)、この三段構えを応用すると、商品申込ページや、住所録作成なども比較的簡単にできるようになります。

さて難しいことは抜きにして、まずは入力ページの部品を見てみましょう。



 ユーザ入力欄は以下の 5 つだけです。

  1. 氏名 -- 入力必須

  2. emailアドレス -- 入力必須

  3. アンケート回答 -- 選択必須。一番上の選択肢が最初に選択されている状態

  4. その他回答入力欄 -- 任意

  5. 要望など入力欄 -- 任意


 HTML による Web ページ作成経験のある方なら、ページ構成は容易に想像できるでしょう。
 PHP では、ある程度ページ部品を使いまわすことができますので、入力、確認、お礼のページで使いまわせそうな部分を抜き出していきます。

 ヘッダ --- 流用可能
 ボディ(本文) --- 一部流用可能
 フッタ --- 流用可能

 ボディが一部流用可能となっている理由は、入力ページではユーザ入力を許可し、確認ページとお礼のページではテキストのみが表示されるという理由で表示動作が異なるためです。それでも確認ページとお礼のページに表示させる内容は使い回せそうですね。

 それではこのアンケートページのブラウザ表示後のソースを見ながら流用できそうな部分にマークを付けてみます。



 図中の赤で囲んだ部分が入力、確認、お礼ページで共通している部分となりますので、PHP コードの中では一度記述すればよいことになります。

 次に、ページ動作の流れを決めます。

  1. 初回ページロード時は入力画面表示。

  2. 必須項目に正しく入力が行われたら、確認ページを表示

  3. 確認ページでユーザが“確定”ボタンを押したら、お礼のページを表示


ページの表示切替を容易に行うため、各ステップを 0 (デフォルト)、1 (確認)、2(お礼)のように決めます。つまり、ステップ 0 では、いくらページをロードしても入力画面が表示され、1 なら確認画面、2 ならお礼の画面という具合です。表示イメージは弊社サーバでテスト公開しているアンケート入力ページで確認していただくことにして、それぞれのステップのフォーム部分のコードを見てみましょう。

【ステップ 0 のソース】


【ステップ 1 のソース】


【ステップ 2 のソース】


ステップ 1 と ステップ 2 を比べてみてください。多少の差異は認められるものの、赤で囲んだ部分が殆んど同じであることがおわかりいただけるでしょう。ということで、この部分も PHP で使いまわすことができます。


●まとめ

  1. アンケート入力→確認→お礼ページの流れを把握

  2. 上記のそれそれのステップに 0, 1, 2 という番号を付ける

  3. ページのヘッダ、フッタ、本文で流用できそうな部分を洗い出す


流用できる部分の洗い出しは、設計段階でとても重要な作業となります。
次回より、上記を踏まえた上で、実際に php を使ってコーディングをしていきます。

2008-06-23

アンチウィルスソフト --- 果てしないセキュリティ

SonicWALL Total Security のようなUTM(統合脅威管理機器)をLAN⇔WAN間に設置すると、ファイアウォール、IPS、アンチウィルス・アンチスパイウェア、コンテンツフィルタリング、暗号化等の機能により、LAN⇔WAN間のすべての通信を管理・監視しネットワークセキュリティを向上させることができます。 では、UTMを配置すればセキュリティは確保できるのでしょうか? 残念ながらそうとは言えません。 ハードディスクのデータをUSBメモリにコピーして持ち出した、機密データを印刷して紛失した、ノートPCを紛失した、サーバ室に許可無く入室した等、セキュリティはシステム管理者だけの問題ではなく、社員など個々人のモラルの問題でもあり、あらゆるリスクを予め想定して対応するのは不可能と言っていでしょう。 

自宅の家の鍵を二重三重にし、窓ガラスも強化ガラスを入れ、セコムを頼み、家人が十分気をつけていたとしても、有能で悪意ある確信犯がいれば、その凶行を防ぐのは至難です。 セキュリティも同様です。 どこまでセキュリティに費用と労力をかけるか、実に悩ましいところですが、システム的にはやはりホスト(PCやサーバ)レベルでのウィルス等のマルウェア対策が必要と思います。 以前にも総論的に書きましたが、数十台を超えるPCのセキュリティを各ユーザのスキルとモラルに委ねるのは危険で、業務的にも効率的とは言えず、なるべく統合的、集中的なセキュリティ管理が望まれます。その統合集中的管理が可能なアンチウィルスソリューションの一つに Panda WebAdmin があります。

Panda WebAdmin のメリット

1. 比較的廉価
2. Windows 2000/2003 Server で利用可(但し、Vistaは未対応)
3. 動作が軽い --- 他のアプリケーションに悪影響を与えない、与えにくい
4. 管理PCからクライアント/サーバを統合集中管理
  • 管理PCから各PC/サーバへPanda WebAdminクライアントを(Push式)インストール
  • 各PC/サーバのウィルス感染状況を表示
  • 各PC/サーバのウィルス定義ファイルの更新状況を表示
  • 外出先のモバイルPCも管理可
【各PCのウィルス定義更新状況を表示するWebAdmin】

5.それなりのウィルス検出精度
6.システムに障害を及ぼす“トンデモ”アップデートがあまり無い

以上

2008-06-20

SonicWALL (3) ---ログ分析ツールViewPointインストールで泣く

前回書いたようにSonicWALLには通信を監視し、「問題あり」とみなした通信内容を警告メールとしてネットワーク管理者に送付することができます。 ただ、この警告メールが大量に届くため、管理者がこれを逐一読むのはまず無理です。 そこでSonicWALL Total Security には、ViewPoint というログ分析ツールが無料で付属してきます。 この ViewPoint ですが、ある一定の環境下は簡単にインストールできます。 しかし一定以外の環境では、多分、嵌ります。 一定以外の環境とは? 私が思うに SQL-Server インスタンスが複数動いている環境はマズイのではないかと。 

以前、 SQL-Server インスタンスが既に2つ存在するWindows 2003 に ViewPoint 4.0 をインストールしようとしたのですが、途中までいくとMSDE(Microsoft SQL-Server Desktop Engine、ViewPointのログ保存用データベース)へのログインの画面で認証に失敗し、続行できなくなりました。 表示されたエラーメッセージには、「後で\ViewPoint4\bin\postInstall.batを実行してインストールを続行できます」みたいなことが出ているので、インストールを一旦中断。 ただ、 その後に postInstall.bat を実行しても、全く同じ状況でMSDEの認証で弾かれてしまいます。 で、サポートに電話したのですが、「そのような事例はあるのですが、解決方法は記されていません」の一言。 「おい、おい、 それで終わりかい?」(心の声)
その時は忙しかったので、既存のSQL-ServerインスタンスがないXP機に ViewPoint 4.0 を入れてしまいました。 こちらは全く問題無くインストール終了。

で、最近改めて件のWindows 2003機へ ViewPoint のインストールをトライしてみました。 前回失敗したときにアンインストールをしたみたいだったので、インストーラの VPS_JP.exe を再度実行。 「もしや今度はすんなりと完了するのでは…」という儚い望みはあっさり裏切らせ、前回と同じメッセージ。 しかたんくインストーラを終了して、上記の postInstall.bat を実行してもやっぱり駄目。 ここまでは前回と同様なので、トラブルシュートする腹を決めました。 まず「サービス」を起動してSQL-Serverインスタンス(サーバ名\SNWL)が存在することを確認。 また、インストール時に指定したディレクトリにMSDEが存在することも確認。では、ViewPoint4\MSDE\Data\MSSQL$SNWL\Data\ 内に存在する 筈のViewPoint 用の.mdfと.ldfファイルは…と思って探しても無い。 あるのは、master/msdb/model/tempの4つのシステムファイルだけ。 SQL-Server Management Studio Express を起動して見ても、やはりこの4ファイル以外は無し。 先に成功したXP内のDataディレクトリには sgmsdb.mdf 他のViewPoint用ファイルがあるのに。
ここにきて、データベースのインストールに失敗していることが判明。 そこでググってみると、灯台下暗し「SonicWALL ViewPoint ユーザーズ ガイド」にたどり着く。 このガイドは ViewPoint 2.5 用でエラーのメッセージの出方も違うけど、第六感的にはぴったし。 P.157以降に解決策というのが書いてあります。 以下、上記マニュアルを引用。

******************** 引用始 ********************
ViewPoint が MSDE データベースの場所を見つけることができない
問題
SonicWALL ViewPoint 2.0 のインストールで、MSDE データベースが見つからない場合、次のようなアップグレード失敗を通知するメッセージが表示され、インストールはフェーズ 2 で失敗します。
[DBNETLIB]SQL Server does not exist or access denied. [DBNETLIB]ConnectionOpen (Connect()).
Java doesn't recognize the MSDE database using the URL "127.0.0.1\SNWL". This is an issue on some Windows 2000 servers.
解決策
次の手順を実行し、インストールを続行します。
1. 「キャンセル」 を選択して、フェーズ 2 のインストールを終了します。
2. コマンド プロンプトから、「SQL Server Network Utility」 (SVRNETCN.EXE) を実行します。 一般的に、このプログラムは、C:\Program Files\Microsoft SQL Server\80\Tools\Binn フォルダ内にあります。
3. 複数の SQL サーバ インスタンスがシステム上で稼動している場合は、「Instance(s) on this server」 リスト ボックスに複数のインスタンスが表示されます。 リスト ボックスから、サーバ名\SNWL の項目を選択します。
4. 「Protocols」 リストから 「TCP/IP」を選択し、「Properties」を選択します。
5. ポート番号を記録します。
6. メニューを終了します。
7. c:\sgmsConfig.xml ファイルと \Tomcat\webapps\sgms\WEB-INF\web.xml ファイルに以下の修正を行います。
dbURL の値を、"127.0.0.1/SNWL" から "localhost:ポート番号" へ変更。
dbhost の値を、 "127.0.0.1\SNWL" から "127.0.0.1" へ変更。
技術的ヒントとトラブルシューティング 157
8. \SQL\bldMSDB.bat に、以下の修正を行います。
User の値を sa に変更
Password の値を <フェーズ 1で選択したデータベースのパスワード> に変更。
9. コマンド プロンプトで、\SQL フォルダへ移動し, bldMSDB.bat プログラムを実行して MSDE データベースをインストールします。
10. \Temp へ移動し、次のプログラムを実行して 「SNWL ViewPoint Summarizer」 サービスと 「SNWL ViewPoint Syslogd」 サービスをインストールします。
schedInstall.bat
vpInstall.bat
11. \Tomcat\bin へ移動し、次のプログラムを実行して 「SNWL ViewPoint Web Server」 サービスをインストールします。
tomcat.bat install
12. Windows システムを再起動

******************** 引用終 ********************

上記ステップの8までは問題なく実行できたんですが、ステップ9 bldMSDB.bat が失敗してしまう。 SQL-Serverの認証方法がWindows認証になっているのが問題か?、と思い、認証を混合モードに変更してもやはり駄目。 仕方が無いので、bldMSDB.bat を開いてみると、その中で大量の.sqlファイル群を実行していて、しかも最初の行(sgmsdb.sqlの実行)から失敗している。 で、sgmsdb.sql では何をしてるかというと、

      USE master;

どうもここから失敗している。 コマンドプロンプトを開いて、

      osql -U sa -P password -S 127.0.0.1\snwl

とやると失敗してしてしまう。 そこで、

      
osql -U sa -P password -S computer_name\snwl

とすると成功(computer_nameはWindows のコンピュータ名)。 そこで、どうやらこのループバックアドレス(127.0.0.1)がおかしいらしいと見当をつけて、以下を実行。

  1. 上記ステップ8にある「127.0.0.1」と「localhost」を「computer_name」に変更。
  2. bldMSDB.bat をメモ帳で開き、すべての「127.0.0.1」を「computer_name」に置換。
上記を実行すると、上記マニュアルのステップ9~12はスムーズに終了し、Windows 2003起動してデスクトップに作成された SonicWALL ViewPoint 4.0 を実行すると、ブラウザに ViewPointの認証画面が表示されるようになり、デフォルトのID:admin、Password:password と入力することにより、ログインできました。 めでたし、めでたし。