2008-12-19

『FlexMy売管』を作るぞ! (2) --- MySQL データベースを作ってみる

(FileMaker Pro 10/11、MySQL 5.1、ODBC 5.1.6 の環境であれば、→ここ(開発日記) とか ここ(日記番外) の方が参考になるかも。 2010/10/21追記 )

1. 取り合えず、リモートのMySQL Administrator で接続していみる

大分前にインストールしたMySQLの管理ツール MySQL Administrator と、今回インストールした MySQL 5.1 は異なるサーバ上にあるが、MySQL Administrator を起動して MySQL 5.1 に管理者権限でアクセスしようとすると、以下のエラーが出る。


    Could not connect to the specified instance.
    MySQL Error 1045.


MySQL 側に移動して、grant all priviledges on *.* to untara@"%" identified by "kantara" を実行し、ここで指定したユーザ名とパスワードとにより、リモートの MySQL Admin からアクセスできるようになる。 




2. Migrationツールはスキップ

MS SQL-Serverで作成した『FlexSql売管』のデータベースがあるので、本当ならこれを MySQL Migration Toolkit という奴で MySQLのデータベースに変換(マイグレーション)できるといいのだが、以前失敗してるので、今回はやめておく。



3. SQL-ServerでCreate文を生成し、MySQLでそのCreate文ファイル実行

まずは、create database flexmy うんたらとやって、データベースを作成。 

次に各テーブルは『FlexSql売管』の SQL-Server のデータベースから create table 文を生成して、MySQL側で実行しようと画策。 SQL-Server Management Studio Express を起動し、取引先テーブルを指定してcreate 文を作ると、こんな感じになる。

USE [neko]  //『FlexSql売管』のデータベース名
GO
/****** オブジェクト: Table [dbo].[取引先] スクリプト日付: 01/07/2009 13:35:41 ******/
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[取引先](
  [〒] [varchar](8) COLLATE Japanese_CI_AS NULL,
  [Fax] [varchar](50) COLLATE Japanese_CI_AS NULL,
  [Tel] [varchar](50) COLLATE Japanese_CI_AS NULL,
 ~~~~~~~~~~ 中略 ~~~~~~~~~~
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF


この文章をtorihikisaki.sqlとして保存し、プロンプトの画面で、

  $ mysql flexmy < torihikisaki.sql

を実行するも、SQL-Serverの吐いたSQL文をそのまま実行できるはずも無く、紆余曲折の末、以下のように変更して上記コマンドを実行すると旨く行った。

CREATE TABLE 取引先(
  〒 varchar(8) NULL,
  Fax varchar(50) NULL,
  Tel varchar(50) NULL,
  ~~~~~~~~~~ 中略 ~~~~~~~~~~
PRIMARY KEY (id) );

以上でSQL-Serverのテーブル等は比較的簡単にMySQLに移植できそうなことが解かった。ところがこの後に思わぬ悲劇が待っていた。

以上

2008-12-17

Wi-Fi Skypeフォンは時期尚早

Wi-Fi Skypeフォン: PC無し、単体でSkypeが実行できるWi-Fi 対応の携帯電話機

どのメーカーもやる気がないようで、後継版も無く発売停止になるか、評判は概して芳しくない。

・Logitec Skype専用 無線LAN携帯 --- 悪評有、2008年以降ファームのアップ無、でも販売継続中
・Belkin Skype 専用 Wi-Fi® フォン --- 速攻で発売終了、後継機無し
・Buffalo WSKP2-G/BK --- 速攻で発売終了、後継機無し
・Panasonic KX-WP800 --- 比較的評判良し、2008年発売、高い、市場モニタ製品? 松下はやる気あんの?

Wi-Fiじゃ無く有線
Webt@lker5000 --- よさげ

2008-12-09

【SonicWALL障害メモ】 IKE Responder: IPSec proposal does not match (Phase 2)

朝、メーラーを起動してみると、SonicWALL の警告の山。


IKE Responder: IPSec proposal does not match (Phase 2) -  221.189.***.***, ***.****.ne.jp -  219.163.***.**** -  192.168.0.66/32 -> 192.168.0.0/24
IKE Responder: No match for proposed remote network address - 221.189.***.***, ***.****.ne.jp - 219.163.***.*** - 192.168.0.66/32なに、これ? 大体、66なんてアドレスは無いし…


こんなのが1時間に何通も届く。 2ヶ月位前にも同様の現象で、同じ警告メッセージが一杯届いているので、なんとか解決したような気がするけど、思い出せない。 年には勝てないので、ちゃんとメモしよう。

参考サイト
Stange errors on TZ170 with unknown LAN subnet
RE: Problem: Site-to-Site VPN ISA2004 and Sonicwall


◇現象解消 --- 08/12/19追記
あっさり解消した。 ネットワークはSite-to-Siteで、

  こっちのTZ180(小社) ⇔ あっちのTZ180(客先)

となってて、「こっちのTZ-180」から上記のエラーログが送られてきてたので、こっちに障害があると思い込んだのがそもそも大間違い。 ただ、「あっちの」は客先の奴なので、滅多にいじることも無いわけで、原因となるのは「こっちの」だろうと、例によって思い込んだ。

結論としては、犯人は Panda MOP。 12月初め位からPandaが「アップデートしたのでPC(サーバを含む)を再起動しろ」とメッセージを表示していたが、うちは兎も角、客先のサーバをそう簡単に再起動できるわけもなくしばし放置。結局、この Panda のアップデートがSonicのエラーメッセージの原因だった。 12月某日12時(昼休)、客先に出向き2台のサーバを再起動。 12:00以降、あの警告メールがピッタリとまった。

クッソォ~、おぼえてろよぉ~、 パンダぁ! ヽ(`Д´)ノ ウワァァァン


◇メモ見つかる --- 08/12/19追記
上に「2ヶ月位前にも同様の現象で」と書いたが、メモが見つかった。それも堂々とテスクトップに置いてあった。 以下、そのメモ。

VPNの設定/詳細設定がこちらとあちらで全く同じことを確認する
  • 0.254と1.252のSAをOFFにし、エラー継続を確認(0.1と1.253と競合していないことを確認)
  • 0.1と1.253で、SonicOS Standard 3.8.0.3-36s.jpn の一致を確認
  • 0.1と1.253で、MTUの一致確認

ネットワーク>ルーティング の誤ったルート設定が原因か? 削除したらエラー解消の模様(08/9/17)


◇今回12月のエラーログ発生時のメモ-- 08/12/19追記
12/13、170/180の2台と客先の180×2台が通信するときに、上記のエラーログを多数受信(但し、客先2台からはこのエラーログを受信していない) 。 亀がNPTの設定を弄ったとうので、4台のNTP設定を一致させるが、現象解消せず。


◇さらに-- 08/12/19追記
上記の英語サイトにもあるように、このエラーはさまざまな要因で起こるようで、発生前後で何か特別な事象が発生していないか、冷静に思い出すことが重要。


(終)

2008-12-08

『FlexMy売管』を作るぞ! (1) --- MySQL 5.1 のインストールでコケる

(FileMaker Pro 10/11、MySQL 5.1、ODBC 5.1.6 の環境であれば、→ここ(開発日記) とか ここ(日記番外) の方が参考になるかも。 2010/10/21追記 )

FileMaker Pro と MS SQL-Server を使用した外注・加工業向け売上・原価管理システム --- 『FlexSql売管』 をリリースしたのは2008年3月。  これを MySQL に移植しようというかねての計画を実行することにする。
まずは MySQL 5.1 (Windows x64版)をダウンロードしてきて、Dell Power Edge T105 (Windows Server 2008 x64)のEドライブにインストール→普通に成功。 ところが、「それは(Eドライブ)は Hyper-V 用のボリュームだから使わないで下さい! ヽ(`Д´)ノ」と怒られたので、仕方なく一旦抜いて他のドライブに再インストールすることに。 ところが、MySQL Server Instance Config Wizard の最後のところで、

   Error Nr. 2003 : Can't connect to MySQL server on 'localhost' (10061)

とか出てくれる。 あぁ、やっぱりインスコで躓いた。 いろいろググってウン時間も費やしたところで、「C:\mysql を削除せよ 」という神の啓示を発見。 レジストリ内の「MySQL」を検索して、かかってきた登録を取捨選択して削除した後に、アンインストールして C:\mysql を手動により削除、さらに再インストール…  あっさり成功、 ありがとう神様。


参考サイト
インストール --- DBOnline

 

Windows 2003 に FileMaker Web Server Connector をインストールする...が失敗

Windows Server 2003 に Web Server Connector をインストールしようとしたら、こんなメッセージが出たことはないでしょうか?



A SCRIPTS virtual directory was not found. You must configure a SCRIPTS virtual directory before FileMaker WSC 5 - IIS can be installed.

FileMaker Unlimited 5.5 に付属の Web Server Connector は Windows Server 2003 での動作保証をしていなのですが、手動設定を取り入れながら FileMaker Web Server Connector をインストールしてみることにしました。試行錯誤の結果、やはり動作はしないようだ、という結論には達したのですが、もし今までに Windows 2003 に Web Server Connector をインストールした成功例があるいう方がいらっしゃったら、助言いただけると非常にありがたいです。

今回試してみた Windows Server 2003 環境への FileMaker Web Server Connector インストールは次のとおりです。

1. IIS 6.0 をインストール。
コントロールパネルの「アプリケーションの追加と削除」より、「Windows コンポーネントの追加と削除」を選択し、表示されるコンポーネントの中からインターネットインフォメーションサービス(IIS)をインストールします。

2. FileMaker Pro 5.5 Unlimited をインストール。
3. IIS 管理ウィンドウを開き、「規定のWebサイト」を選択して、右ペインに scripts という名前の仮想ディレクトリを作成。実行アクセス許可は、下図のように、「スクリプトおよび実行可能ファイル」にしておく。

4. レジストリ値を追加。
Windows Server 2003 のデスクトップに戻り、「スタート」→ 「ファイル名を指定して実行」の順に選択し、regedit と入力してレジストリエディタを起動する。

下図のように、\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters に Virtual Roots というキー値を追加し、そこに文字列値 /Scripts を新規追加する。値のデータは、c:\inetpub\scripts,,204 とする(この値は WSC で運用中の Windows 2000 Server 環境のレジストリ値を参照)。



5. FileMaker Web Server Connector をインストールする。
インストールが終わるとマシンを再起動するようメッセージが表示されるので、マシンを再起動する。

この時点で、以下のメッセージが表示される。



というわけで、手動で IIS フィルタを設定する必要があるということで、いろいろ探し回ったのですがとうとう解決策が見つかりませんでした。

2008-12-03

Hyper-V にゲスト OS をインストール(覚え書き)

Windows Server 2008 の便利な機能の一つに Hyper-V があります。
これは、仮想的にディスクを用意することによって、別の OS を同居させて運用するというものです。

たとえば、Windows Server 2008 上で Windows Server 2000、Windows XP、Linux などを運用できます。

詳細は以下のサイトを参照していただくとして、ここではゲスト OS のインストールのヒントを簡単にまとめたいと思います。

第14回 Windows OSに標準搭載された仮想化機能「Hyper-V」

●仮想ハードディスクについて

仮想ハードディスク(VHDファイル)形式 -- ディスクドライブの領域をゲスト OS 用に確保して使用。スナップショットを撮ることができ、必要に応じてスナップショットを撮った時点の状態に復旧することが可能。

パス・スルー形式 --- ディスクドライブを丸ごと使用。動作速度は VHD 形式に比べると高速だが、スナップショットを撮ることができないので要注意。

●ゲスト OS として Windows 2003 をインストールするときの注意点
Windows 2003 は SP2 以降でないとインストール中にブルースクリーンが表示されてしまうので注意が必要。

ゲスト OS をインストールする際は、以下のページを参考にするとよいでしょう。

Hyper-V におけるゲスト オペレーティング システムのサポート

2008-11-28

Windows 2008 で FileMaker Server 9 の Instant Web Publishing は動作しない模様...

さて、先日 Windows Server 2008 環境に FileMaker Server 9 Advanced を入れてからというもの、ぼちぼち動作を検証していますが、いろいろ試した結果、 Instant Web Publishing はどうやら動作しない模様です。

FMForums の方でも「恐らく動かないだろう」と言っている人がいるように、動く機能があるかもしれないし、動作的に微妙なものもあるだろうという感じなのでしょうか。
とにかく Instant Web Publishing の方は当方の調査では無理、という結論に達しました。

参考:
[Windows] FMSA9,0 on Windows Server 8
Windows Server 2008 上で FileMaker Pro Server 9 は動作するか?

あと、FileMaker Server 9 のアップデータが出ていたので、以下のページより V2 をダウンロードしてインストールしようとしたのですが、Windows Server 2008 環境でこの Setup.exe を実行させるとエラーメッセージが出てしまい、続行できませんでした。

FileMaker Server 9v2 & FileMaker Server 9v2 Advanced Windows 版 アップデータ




やはり、対応を謳っていない環境でのインストールは無理、ということなのかもしれませんが、この件については引き続き調査中です。

2008-11-25

64 ビット版 Windows Server 2008 の IIS7 で php が動くようにする

64 ビット版の Windows Server 2008 に 32 ビット版のみ提供されている php5 をインストールするのには、ちょっとコツがいることがわかりました。

従来の方法ではまず動かない

従来どおりにインストールを行い、phpinfo() を表示させようとすると、エラー 503 が表示されました。ISAPI フィルタもハンドラマッピングも php 向けに指定したにもかかわらずエラーが表示されるので、ネットで調べてみると、DefaultApplicationPool の「32ビットアプリケーションの有効化」を[True]にすると良いとあったので、True にしてみたところ、程なくして DefaultApplicationPool が停止してしまいました。

そのときに報告されたものがこのイベントエラーです。

イベントID:2280
モジュール DLL C:\Windows\system32\RpcProxy\RpcProxy.dll を読み込めませんでした。このデータはエラーです。

暫く試行錯誤を繰り返していたのですが、この環境では ISAPI フィルタによる設定は無理そうだということがわかってきたので、途中で FastCGI を使う方法に切り替えました。

FastCGI で PHP を動かす
IIS 7 のインストールオプションで、CGI を選択して IIS7 をインストールすることによって、php-cgi.exe を呼び出して実行させることが可能です。

手順を説明します。
1. php5 の最新版をダウンロードして、適当なところに配置する(例:c:\php)。
php5 はここからダウンロードできます。
2. php.ini-recommended ファイルをコピーして php.ini というファイルに名称変更し、これをメモ帳などで開いて次に該当する行を修正して保存する。
(先頭のセミコロンを外して修正。該当するものがない場合は行を追加。)

fastcgi.impersonate = 1
cgi.fix_pathinfo=1
cgi.force_redirect = 0
open_basedir ="c:\inetpub\wwwroot"
extension_dir = "./ext"

3. コントロールパネルより「システム」をダブルクリックして、左ペインのメニューから「システムの詳細設定」をクリック。“環境変数”ボタンをクリックして システム環境変数の一覧に表示される path 変数に php へのパスを追加。
(c:\php; を追加すれば良いです。)

4. インターネット インフォメーション サービス(IIS) マネージャーを開き、ハンドラマッピングから「モジュールマップの追加」を選択し、以下の情報を追加。

要求パス:*.php
モジュール: FastCgiModule
実行可能ファイル(オプション): C:\php\php-cgi.exe
名前:PHP

OK を押して保存します。

5. IIS を再起動して、php テストページを表示させる。
以下のファイルを作って phpinfo(); を入れた php ファイルを作成してブラウザで表示確認。

php の情報ページが表示されれば成功です。

今回は以下のサイトを参考にしました。
Using FastCGI to Host PHP Applications on IIS 7.0

2008-11-21

Windows Server 2008 の認証でつまずく

Windows Server 2008 を導入してから Windows ライセンス認証をするのを忘れていたのですが、残りが 31 日となっていたので、今のうちにライセンス認証をしておくことにしました。

ところが、認証手続きをしようとすると、次のようなエラーが発生。



ネットワークカードの TCP/IP 設定にも DNS サーバの IP アドレスがきちんと設定されていたため、ネット検索で以下の情報を見つけました。

Windows Vista のライセンス認証の手続きを行うとエラー メッセージ "エラーが発生しました" が表示される

要は、「プロダクトキーの変更」を選択して、プロダクトキーを入力することによって解決するということのようです。
プロダクトキーを入力しなおさなければならないのは、不正ユーザ対策のようですが、気づかないとこれで時間を取られてしまうので(私を含め)、ちょっと人騒がせな仕様だと思いました。

2008-11-20

Windows Server 2008 上で FileMaker Pro Server 9 は動作するか?

FileMaker社はこの構成をサポートしていないし、する予定もないらしい。

実際はどうなのか? 「Windows server 2008」「FileMaker Pro Server 9」をキーワードにググってみると、案の定、日本語ではほとんど情報がない。 やっぱり頼りになるのは英語サイト。


http://www.fmforums.com/forum/showtopic.php?tid/195407/



とりあえず動くらしい(「動かん」という人もいる)ということで、小社でもインストール。
どうやら動く。 上のサイトによると、動いているところでは、半年以上、問題なく動いているらしい。

とうことで、FileMaker社の保証はないけど、FileMaker Pro 5.5 に加え、FileMaker Pro Server 9 も Windows Server 2008 で動く(こともある)。

注:ファイアウォールでポート5003を開けるのを忘れずに。

2008-11-17

【Windows障害メモ】サーバの時刻が狂う

 ドメインコントローラのイベントビューアで NTP サーバのエラーが出ていました。
 イベント ID 11 NTP サーバー から応答がありませんでした

 NTP サーバの同期ミスということで、以下のコマンドを打って調べてみることにしました。

 NET TIME /querysntp

 結果は「このコンピュータは現在、特定の SNTP サーバーを使用するよう構成されていません。」だったため、外部の NTP サーバを登録して同期させることにしました。
 以下のサイトより、米国 NASA および東京大学の NTP サーバを指定してみました。

NTP サーバ一覧

 以下のコマンドで NTP サーバを指定することができます。この例では NASA の NTP サーバを指定しています。

 NET TIME /SETSNTP:198.123.30.132

 また、NTP サーバを複数指定したい時は、以下のように列記した NTP サーバ名(またはIPアドレス)を二重引用符で囲みます。この例では NASA の NTP サーバと東京大学の NTP サーバを一緒に指定しています。

 NET TIME /SETSNTP:"198.123.30.132 130.69.251.23"
 
 同期は 8 時間ごとに行われるということですが、レジストリキー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters の Period 値を修正することで、同期の頻度を変更できます。


0 = 毎日 1 回。
65535, "BiDaily" = 2 日に 1 回。

65534, "Tridaily" = 3 日に 1 回。

65533, "Weekly" = 毎週 (7 日に) 1 回。

65532, "SpecialSkew" = 3 回正常に同期されるまでの間、45 分ごとに 1 回。その後、8 時間ごとに 1 回 (1 日に 3 回)。[デフォルト]

65531, "DailySpecialSkew" = 1 回正常に同期されるまでの間、45 分ごとに 1 回。その後、毎日 1 回。

freq= 1 日に freq 回同期する。


一応は NTP サーバーを設定して同期することは確認できましたが、例のイベント ID がまた出ていたので、ひょっとすると二つ指定したどちらかの NTP サーバとの同期に失敗したのかもしれません。

参考ページ:
W32Time サービスのレジストリ エントリ

【Windows障害メモ】 リモートディスクにアクセスできない

◇現象
アクセスできていたリモートディスクに、いつのまにかアクセスできなくなる
(NICを交換が原因か?)

発生イベント
イベントの種類: 警告
イベント ソース: LSASRV
イベント カテゴリ: SPNEGO (Negotiator)
イベント ID: 40960
日付: 2008/11/17
時刻: 11:29:53
ユーザー: N/A
コンピュータ: SC420
説明:
サーバー cifs/192.168.X.X の認証エラーを検出しました。 認証プロトコル Kerberos からのエラー コードは "指定されたユーザーは存在しません。
(0xc0000064)" でした。


◇解決策
http://www.eventid.net/display.asp?eventid=14&eventno=4189&source=Kerberos&phase=1

There were password errors using the Credential Manager. To remedy launch the Stored User Names and Passwords control panel applet (註:コンパネの「ユーザ名およびパスワードの保存」のこと)and reenter the password for the credential .

試してみて駄目だった(ような気がした)ので、エントリそのものを削除、さらに再アクセスしてアカウントとパスワードを再入力したらうまくいった。 尚、上記の「ユーザ名およびパスワードの保存」にこのときした入力したそれらは記録されず、どのような状況下でここに登録または誤登録されるのかは不明(調べていない)。

以上

【Windows障害メモ】ActiveDirectory へのログイン失敗

 最近、ネットワークコンピュータのうち一台がドメインに参加できなくなるという現象が発生しました。
 そのコンピュータに関しては、一ヶ月ほど前にネットワークカードを交換してからというもの、他のネットワークコンピュータからディスクドライブの参照ができなくなってしまいました。
 そしてつい先日、ActiveDirectory のドメインコントローラになっているサーバ機の Kerberos 認証サーバのリセット作業を行った後は、そのコンピュータはまったくログインできない状態となりました。

 ActiveDirectory サーバ機にはイベント NETLOGON ID 5722、クライアント機には NETLOGON ID 3210 が記録されたので、原因を調べてみると、ドメインコントローラでの認証エラーのようだったのですが、ネット検索により、以下の解決方法に辿りつきました。

Windows NT/2000/XP/2003 ドメインにログオンできない(その2)
ドメインに参加できない:コンピュータ・アカウントを登録し直す

 これらの情報に従って、一度そのコンピュータをドメインから外してワークグループにしてから、再度ドメインに参加させることによって、何とか解決することができました。
 単純なようで、意外とこれは裏技的な対応方法ではないかと思います。今回は上記サイトに助けられました。

2008-10-21

Panda MOP のファイアウォール設定方法

さて、前回は Panda MOP (Managed Office Protection) インストールのトラブルについて書いたのですが、うまくインストールできた MOP の設定もぼちぼち始めています。WebAdmin と比較すると、アンチウィルス機能にファイアウォール機能が追加になっているところが大幅なアップグレードなのではないかと思います。

 アンチウィルスとファイアウォールのどちらをインストールするかは、Web 管理画面(https://managedprotection.pandasecurity.com/console/)のプロファイルで設定します。
 最初は DEFAULT プロファイルしかありませんが、新しいプロファイルを追加していくことによって、アンチウィルスとファイアウォール機能のインストールおよび設定条件を細かく指定していくことができます。

 
 ファイアウォールの設定は、プロファイルページの左に表示される「ファイアウォール」をクリックします。同じプロファイルを持つコンピュータに対し、まとめてファイアウォールを適用することも、クライアント側で個別にファイアウォールを適用することができるのも特長です。管理するコンピュータ台数が多い場合は、サーバ側で一括管理するのが楽かもしれません。

 デフォルトで Panda ルールが適用されるので、基本的なファイアウォール設定は自動的に行われますが、管理者が個別にルールを追加することもできます。使用する通信系プログラムがわかっている場合は「プログラム」、ポート別に管理する場合は「システム」を選択して設定項目を入力します。

 この設定はリアルタイムに反映されるわけではないので、設定後に次回自動更新のタイミングまで待つか、クライアント側で個別にアップデートを実行します。
 

2008-10-20

Panda Managed Office Protection に泣かされる

 Panda WebAdmin AntiVirus (以下Webadmin)の後継版として Panda Managed Office Protection (以下 MOP)がリリースされました。これにより、WebAdmin の提供は今年一杯になるそうです...。
 ということは、WebAdmin を適用済みのすべてのコンピュータに於いて今年中に MOP への移行が必要になるというわけです。

 WebAdmin の提供が近々終了になるだろうということはある程度予想していたため、英語ベータ版としてリリースされていた MOP を 8 月中旬あたりから少しずつテストインストールしてきたのですが、インストールなんて簡単という予想に反し、トラブルが続出してしまったため、ベータ版の段階から MOP に対する不安が一気に募ってしまいました。

 当方で発生したトラブルはこのような感じです。

1. Vista に MOP をインストールした後に Panda アイコンをマウスで右クリックして表示される Update メニューで定義ファイルの更新を行おうとすると、以下のメッセージが出てプログラムがクラッシュする。

Panda Interface Manager Application [Local and Mail Alerts] は動作を停止しました。

2. 弊社の Windows XP 機においては、MOP インストール途中に再起動を促すメッセージが表示され、その指示に従って再起動を行うと、また同じ再起動メッセージが表示され、延々と再起動のループから抜けられなくなる。

3. Windows Server 2008 で MOP をインストール中に、「Downloading signature file」でエラーが発生してしまい、先に進めなくなる。
  この現象については、SonicWall のセキュリティ設定を修正したところ、無事インストールが続行できるようになりました。


 一応その他の Windows Server 2000, 2003, Windows XP マシンには MOP のインストールに成功したのでホッとしておりますが、上記 1.、2. については未決のまま....。まだ泣かされております。

 現在、WebAdmin お使いで MOP について御存じない方は、この機会に以下の情報をご覧になることを強くお勧めしたいと思います。
 Panda WebAdmin Antivirus製品の販売及びサポート終了(END OF LIFE)
 および後継製品Panda Managed Office Protectionへのマイグレーションのご案内

2008-10-10

拠点間VPNネットワークの構築 (2) --- 回線の冗長化

近年、インターネット回線やルータなどのネットワーク機器はかなり安定してきているようですが、回線かルータのいずれかが落ちると拠点間の通信は一切できなくなるので、冗長化する --- 回線とルータを複数用意する--- ことが重要です。 

【回線とルータの冗長化イメージ図】
画像を追加
上図のように、重要な拠点間の回線とルータは二重化または多重化しておきます。 回線は異なるキャリアのものを使用し、一つのキャリアの回線(例:NTT Bflets)が落ちても、生きている他のキャリア(KDDI)に切り替えて運用を継続します。 回線の切替は自動的に実行される(SonicWALLによる冗長化の例)が理想ですが、そのようなネットワーク構成は通常、高額になります。 よって、規模の大きくない拠点においては、障害発生時は手動によりTCP/IPプロパティのデフォルトゲートウェイを切り替えれば良いでしょう。 また、回線にかかる負荷を分散させるために、拠点にあるPCの何台かを1つの回線へ、残りのPCをもう一つの回線へと、通信をゲートウェイの指定により割り振るのも良いと思います。


デフォルト ゲートウェイの冗長化に関するメモ
TCP/IPプロパティのデフォルトゲートウェイに複数のルータのIPアドレスを指定して冗長化すれば、ルータの障害発生時に自動的にゲートウェイを切り替えてくれる筈だが、冗長設定を行うと、通信が不安定になる(断続的に切断される)ので要注意。


回線メモ
◇KDDI
インターネットゲートウェイ 
イーサシェア 光ファイバー、100Mベストエフォート型、¥184,800/月~(関東) *1
Business-ADSL 下り最大12Mbps/上り最大1Mbps、ベストエフォート型、¥27,000/月~ *2
  1. 田舎は使用できないところが多そう。
  2. 微妙に(一部)NTTの電話網を使っているようで、NTTが落ちた場合、影響を受ける可能性有。
◇Usen
光ビジネスアクセス  光ファイバー、100Mベストエフォート型、¥52,500/月~
  • 田舎では使用できない。

2008-10-09

拠点間VPNネットワークの構築 (1)

一昔前であれば、膨大な初期費用とランニングコストを要した拠点間の高速ネットワーク。 近年の光回線等のブロードバンドと、各種ネットワーク関連機器の普及と低価格化により、従来に比し非常に低価格で実現できるようになりました。 今回は最近、小社で手がけた小規模な支店間VPNネットワークの構築について紹介します。


要件定義(お客様、ご要望

  1. 4拠点間+α VPNネットワーク構築
  2. 回線冗長性(ルータや回線障害時に回線を切り替え、業務を継続できること)
  3. 主なアプリはFileMaker Pro 5.5
  4. Windows Server 2008 と Terminal Service を導入、支店でも社内LAN並みのパフォーマンスを出すこと
  5. 堅牢なセキュリティ環境と集中監視・管理
  6. システム管理者が拠点のネットワークを遠隔保守
  7. 初期コストを最小化する
  8. 社内システム管理者の負担を最小化
  9. 拠点間の通信コスト限りなく0に、そしてスムーズな意思疎通

と、テンコ盛りの要件、しかも低予算...



1. 4拠点間+αのVPNネットワークを構築する

本社、工場、支店、土屋企画、出先ノートPC(緊急対応用)間のVPNネットワークを構築。  このうち、本社、工場、土屋企画間はSite-to-Site VPN(SonicWALL TZ180同士で暗号化)、支店と出先ノートPCはVPNクライアントにGVP(SonicWALL Global VPN Client)を使用。


4. 回線冗長性

万が一の回線やルータ障害の時にも、工場で生産や配送の指図書や送状が照会・印刷できますように。 大分前ですけど、OCNが大規模回線障害で何時間も不通になってる、って、NHKの夜のニュースでやってもやってましたね。 はい、うちも被害者です。


3. 主なアプリはFileMaker Pro 5.5

少しはクライアント/サーバっぽいFileMaker 8.5とか9を使うと、クライアント⇔サーバ間のパフォーマンスもよくなると思うんですけどね…  お客様の暗黙の(しかも強力な)要請により、既存のFileMaker Pro 5.5/FileMaker Pro Server 5.5によるシステムを継続利用。 既存システムのできる限りの延命も重要なミッションでございます。


4. Windows Server 2008 と Terminal Service を導入

「2008でFileMaker Pro 5.5が動くん?」 --- Ans:はい、立派に動いてますね。 しかもTerminal Server 上で。 

「印刷は? ローカルディスク利用は?」 --- Ans:お客さんの環境では、問題なく動作しておりますです。 

「で、Vistaは?」 --- Ans:動くかも…


5. 堅牢なセキュリティ環境と集中監視・管理

SonicWALL と Panda で、統合的、集中的な管理。企業の社会的信用にかかわるセキュリティ関連リスクの低減に、万全を期しましょう。


6. システム管理者が拠点のクライアントPCを含むデバイスを保守

遠隔地よりシステム管理者(≒小社)が、サーバ、クライアントPC、ルータ(SonicWALL)、プリンタ等を管理・保守できるようにしています。 請け賜っているのは SonicWALLの保守と各PCのセキュリティ管理だけなのですが、「これ、セキュリティの問題ではありませんね」って言えるまでの調査過程で、大体は原因が判明してしまうんですけどね。


7. 初期コストを最小化する

  • Dell PowerEdge R300 (RAID 1)
  • Windows Server 2008 + Terminal Service Client ラインセンス
  • SonicWALL TotalSecure TZ-180 × 4台
  • Panda WebAdmin クライアントライセンス(追加ユーザ分)

合計60万位。 既成のハード/ソフトだけでこれだけはどうしてもかかってしまいます(クライアントPCやプリンタは既存のモノで新規導入無し)。 ホントに大変なのは、これらの機器やソフト、PC、プリンタを最適に設定して、テスト、テスト、そしてテスト。この部分は小社の営業努力で ・゚・(ノД`)・゚・


8. 社内システム管理者の負担を最小化する

経営者  「システム、特にセキュリティなんかじゃ飯は食えんのよ」

小社 「ごもっともでございます(トホホ...)」


9. 拠点間の通信コストを抑える

IP電話より、Skypeとか、AOL IMの方が、使い勝手も、生産性が高いですね。

(続く)

2008-08-13

SonicWALL を使った Site-to-Site VPN の構築

 VPN ルータ同士を接続して常時 VPN 接続を確立することを Site-to-Site VPN と言いますが、最近弊社では SonicWALL 同士の Site-to-Site VPN 接続の設定テストを行っています。

 VPN ルータが各終点に一つずつの場合は、比較的設定は容易です。
 基本的には VPN のポリシー設定で「主格 IPSec ゲートウェイ名またはアドレス」に対岸のルータアドレス(ゲートウェイアドレス)を入力し、「事前共有鍵」に任意の共有鍵コード(両方のルータに同じ共有鍵を設定)を指定し、そして「対象先のネットワーク」に対岸 LAN のネットワーク(たとえば 192.168.3.0)とサブネットマスクを指定するだけです。

 しかし、ネットワークが落ちたりすると業務に支障が出るような環境では、回線を複数用意しているところもあります。そのようなときに、現用回線と予備回線の両方に対して VPN トンネルを張っておき、現用回線がダウンしたときに予備回線の VPN トンネルを使うことがあります。これを冗長 VPN ゲートウェイと呼んでいるそうですが、この設定は、理屈では「主格 IPSec ゲートウェイ名またはアドレス」に現用回線のルータアドレス、「副格 IPSec ゲートウェイ名またはアドレス」に予備回線のルータアドレスを指定すれば動くということになっているのですが、何故か副格ゲートウェイの方だけが採用されている状態となりました。主格の方が無視されている状態なので、現在この原因について調査中です。

2008-08-04

Windows Server 2008 の TS EasyPrint について

 前回の投稿に引き続き、今回は Windows Server 2008 の TS EasyPrint の動作を検証してみました。
 TS EasyPrint とは、リモートセッションが確立されている場合に、クライアント側のローカルプリンタを使って印刷が可能となるものです。従来は、サーバ側にもクライアントのドライバをインストールしておき、プリンタポートマッピング設定をしておく必要があったのですが、TS EasyPrint ではユーザによるプリンタポートマッピングが不要となるため、ドライバをサーバ側に入れなくても良い、というシナリオになるのでしょう。TS クライアントは Windows Vista SP1 であることが最低条件のようですが。

 上記に従って、VPN 経由で TS 接続を行い、プリンタ情報を見てみると、最初のうちはクライアント側プリンタ 2 台のうち 1 台(Canon BJ 895PD)が「リダイレクトされた」という表現でサーバ側に表示されていることを確認できました。このプリンタを使ってテストページ印刷には成功しました。
 しかし、もう一台のプリンタ(Dell All-in-one Printer 810)は表示されることがなく、ポート設定をいろいろ弄ってやってみたのですが、努力空しくこちらの EasyPrint は実現しませんでした。

 そうこうしているうちに、Canon BJ 895PD も出てこなくなり、TS EasyPrint の不安定感が募ってきました。ひょっとすると VPN 経由だと不安定になる可能性が高くなるのかもしれません。

 この辺はもうすこし研究課題にしたいと思います。

参考:
Windows Server 2008 のターミナル サービス

2008-07-28

Windows Server 2008 のインストールと Terminal Service 設定

 Windows Server 2008 を弊社にもインストールしてみました。対象サーバ機は Dell PowerEdge SC440 です。
 インストール自体はものの 30 分もあればできたのですが、最初の Administrator パスワード指定でちょっと手こずりました。Windows Server 2008 では、ローカルセキュリティポリシーの「パスワードは複雑さの要件を満たす必要がある」が有効に設定されているため、以下の条件を満たすようにパスワードを決定する必要があります。そしてようやくログインに成功。

 ユーザーのアカウント名またはフルネームに含まれる 3 文字以上連続する文字列を使用しない。
 長さは 6 文字以上にする。
 以下の 4 つのうち 3 つの条件を満たす必要あり。
   英大文字(A ~ Z)
   英小文字(a ~ z)
   10進数の数字(0~9)
   アルファベット以外の文字(!、$、#、%など)


 次にリモートデスクトップ接続を有効にするための機能を設定しました。ターミナルサーバーのインストールですが、サーバマネージャの「役割」というメニュー項目から追加します。
役割
 今回はターミナルサーバー、TS ライセンス、TS Web アクセスをインストールしました。
 
 さて設定ですが、ちょっと勉強が必要になってしまいました。
 RDP --- Terminal Service もしくはリモートデスクトップ接続を従来のように使えるようにするが、セキュリティレベルは落ちる。
 ネゴシエート --- クライアント側で SSL が有効になっている場合は SSL を使って接続するが、有効になっていない場合には RDP を使う。
 SSL(TLS 1.0) --- 常に SSL を使って接続する。

 ネゴシエートにしておけば、従来の TS/リモートデスクトップ接続と Windows Server 2008/Vista 対応の TS/リモートデスクトップ共有を混在させることができる模様です。ただ、SSL に特化すればおそらくセキュリティが一番高くなるのでこれができることに越したことはないと思います。

 SSL を使えるようにするには、TS/リモートデスクトップ接続のクライアント側がリモートデスクトッププロトコル 6.1 をサポートしている必要があります。この条件を満たすクライアントは次のとおりです。

 Windows Server 2008
 Windows Vista with Service Pack 1
 Windows XP with Service Pack 3
 
 ただし、XP with Service Pack 3 の場合は、ネットワークレベル認証がサポートされていないため、ターミナルサーバ構成で「ネットワークレベル認証でリモートデスクトップを実行しているコンピュータからのみ接続を許可する」のチェックを外しておく必要があります。
RDP-Tcp

2008-07-18

カラーレーザープリンタの奇怪

かれこれ5、6年前に約2万円で購入し、八面六臂の活躍をしたBJ S600 がそろそろポシャりそうなので、価格に手頃感がでてきたカラーレーザープリンタを購入しようかなと思い、調べて見ました。 すると、なんか奇奇怪怪な世界。

というのは、Brother MFC-9420cnという機種の本体(カラー3色と黒1色の計4本のトナー付、以下、トナー4本、と言う)の価格が、トナー4本より安い。 よくよく説明を見ると、購入時付属のトナーはスターターうんたらという減量されたものらしい。 「これじゃ、客はわかんないよ」と思いつつ、他のメーカーの低価格機も価格.comで調べてみると、トナー4本(6000枚程度印刷)で本体の半分~全額ちょっと欠ける位の価格になってしまう。 さらに、トナー以外の消耗品として、ドラムとか感光体うんたらとか、メンテナンスキットとか、うんたらベルトとか、メーカー毎に異なる様々なものがあり、しかも耐久期間もまちまち。 確かに公称のページ当たりの印刷コスト項目はあるのだけれども、これにドラムやらその他の消耗品の価格が反映されているのだろうかと不安になってくる。 で、当初どれが一番お買い得なのか?と思って作ったプリンタ比較表も、なんかあまり役に立ちそうもないような気がしてくる(この表に興味のある方は→これ)。 本体に対してトナーの価格が高く、奇怪な消耗品が数々あると迷路に入り込んだ気分。 トナーだけ買い換えて、ドラムやその他の高い消耗品の購入を迫られる段になったら、(エコは差し置いて)新機種に買い換えるのが一番経済的なような気もしてくる。 そもそも「レーザープリンタはインクジェットよりランニングコストが低い」と巷に言われる大前提も疑わしく思えて…

どうしようかなぁ?と迷っているところに、目に飛び込んできたのが、HP Officejet Pro K8600dn というインクジェット機。 Web記事によると、A4カラー1枚の印刷コストが6.3円、カラー印刷時35枚/分の高速、その他のスペックを比較してみても、レーザープリンタに勝るとも劣らない。 レーザープリンタと違って、よくわからない消耗品もない、少なくとも書いてはいない。

HP Officejet Pro K8600dn



ということで、K8600dnを購入することになりました。 吉と出るか、凶と出るかお楽しみ。 


(土屋)

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)

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

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


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

2008-07-04

SonicWall Global VPN Client のインストールが失敗したり、クラッシュしてしまうときのちょっとした改善案

 SonicWall には仮想プライベートネットワーク機能(VPN: Virtual Private Network, 以降 VPN)が搭載されているので、SonicWall を購入して VPN ライセンスを購入することによって、VPN 公開ができるようになります。
 この SonicWall VPN にアクセスするためには、クライアントとなるコンピュータに SonicWall Global VPN Client (以降 SWGVC)をインストールと接続設定を行う必要があります。

 インストーラを実行して指示に従えば終わりというパターンが通常で、アプリケーションを使うほとんどのユーザがそのような感覚でインストーラを実行していると思います。
 しかし、最近の FileMaker Server 9 のインストールトラブルのように、物によってはスムーズにインストールできないものもあるので、すぐできて当然という安易な姿勢で臨むと泣きを見る羽目になることもあったりします。

 SWGVC もなかなか癖のあるソフトウェアと言え、マシン環境によってはすんなりインストールできたり、インストール初っ端から躓いたり、設定の段階で躓いたりと結構トラブルに見舞われため、ここでその経験談をまとめてみることにします。

  1. 最初のインストールで躓くとき
     SWGVC をインストールした直後に起動しようとすると、SWGVC のレジストリ登録に失敗したというメッセージが出て失敗することがあります。こうなると、起動は絶対にできないので、一度 SWGVC をアンインストールし、さらにレジストリ情報を消去するプログラム SWVPNClientClean.exe を実行してから完全にインストール情報を消去した上で、SWGVC を再インストールする必要があります。

  2. SonicWall にアクセスできないとき
     ピア IP アドレス(SonicWall の IP アドレス)を正しく設定し、接続ユーザ名とパスワードを正しく指定したにもかかわらず、ステータスが接続中だったり、IP アドレス取得中のままになってしまうことがあります。ログを見ると、"The peer is not responding to phase 1 ISAKMP requests." が残っていることがあります。
     この場合は、SWGVC の Peers タブより、LAN Settings にクライアントネットワーク側のルータ IP アドレスを入力したり、NAT Traversal を 「Disabled」、Interface Selection を「LAN Only」に変更することによって改善することがあります。
    SWGVC
    参考リンク:
    SonicWall VPN Client Doesn't Work Behind NAT Firewall(英文)
    Sonicwall - The peer is not responding to phase 1 ISAKMP requests(英文)
    NAT Firewall on router blocking sonicwall VPN?(英文)
    NAT Firewall on router blocking sonicwall VPN...(英文)

  3. 接続が確立された直後に SWGVC がクラッシュするとき
     これが一番厄介だと思います。今のところ Windows XP Service Pack 2 で発生する可能性が高いことは経験からわかってきたのですが、すべての同様の環境で発生するとも言い切れず、このような現象が発生するコンピュータでは、SWGVC のインストール、アンインストールを繰り返したところで症状が改善することはまずないでしょう。
     しかし先日、客先でどうしてもこのような現象が発生する SWGVC を動かす必要があり、苦し紛れですが Windows 互換モードで実行することにより事なきを得ました。以下、方法を簡単に説明します。
     1) 今までどおり SWGVC を実行させてVPN 接続を行い、Connected が出た直後に SWGVC がクラッシュすることを確認します。
     2) SWGVC のプログラムアイコンを右クリックして「プロパティ」を選択し、表示されるダイアログより「互換性」タブをクリックします。そこで「互換モードで実行する」にチェックを付けて、以前の OS のリストの中からできるだけ最新のものを選択して実行してみます。
    Windows 互換モード
     この方法で、今のところ Windows 98/Windows ME の互換モードで実行に成功しています。今までいろいろ試してみたが、クラッシュしてどうにもならないという方はダメ元で試してみる価値はあると思います。

【応用その2】FX.php を使ったアンケートフォーム作成 --- 従来のファイルメーカー Pro データベースで Web アプリケーション作成

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

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
 
 さて前回の FX.php 解説に引き続き、今回は FX.php を使って従来の FileMaker データベースにアクセスする方法について触れてみることにします。今回もまた、今まで使ってきたアンケートフォームにちょっと修正を入れるだけです。アンケートフォーム作成のおさらいが必要な方は、こちらを先にご覧ください。

 FileMaker API for PHP を利用するためには、FileMaker Pro 9 と FileMaker Server 9 がインストールされていることが条件となるため、従来に比べるとコスト的に敷居が高くなってきています。安定したデータサーバ運用を目指すのなら、もちろんこれらを導入するのが確実ですが、FileMaker Pro 5.x/6 で機能的に十分に満足している方には、ちょっと手が出にくいパッケージであることも確かでしょう。

 そこで、FX.php と FileMaker Pro 5.x/6 の Web コンパニオンプラグインを組み合わせてもデータベースへの書き込みを実現できるため、既存のシステムをそのまま Web 公開データベースとして活かすことも可能となります。
 ただし、通常版は 10 アクセスユーザ数(10 IP アドレス)という制限が伴うため、現実的な運用にあたっては FileMaker Pro 5.x/6 Unlimited が必要になることは注記しておきたいと思います。

 それでは実際に既存のサンプルコードを修正していくことにしましょう。
 処理は前回の FX.php 接続とほぼ同じですが、今回はそれに加え、文字コードの変換が必要となります。
 FileMaker Pro 9 では内部コードを UTF-8 で処理しているため、ソースが UTF-8 で記述されていれば問題はなかったのですが、FileMaker Pro 5.x/6 では内部コードを Shift-JIS で扱うため、このままデータを送るとエラーが起こったり、文字化けが発生してしまいます。

 そこで、今までの処理に文字コード処理を追加します。

  1. FX を使用することを宣言する(FX インスタンスを作成する)。

  2. 使用するデータベース名とレイアウト名を指定する。

  3. 使用するユーザ名とパスワードを指定する。

  4. データ送信時の文字コードを Shift-JIS に変換する。

  5. 追加するフィールドと、そのデータを指定する。

  6. レコード追加を実行する。



 上記を FX.php の記述規則に従って置き換えると、次のようになります。

 赤線を引いた部分と、赤で囲った部分が前回と異なってはいますが、その他はすべて同じです。
 指定の通り、FX インスタンス作成時に、使用するデータソース(データベース)が FileMaker Pro5.x/6 であることを知らせます。
 そして、データ送信前に文字コードセットを UTF-8 から Shift-JIS(SJIS) に置き換えます。

 ただし、FMP7/8/8.5/9 に対してこの文字コード変換を行うとデータ書き込みに失敗してしまうため、必要に応じて、データソースが FMPro5/6 のときだけ文字コード変換を行うという条件を追加する必要があります。
 この条件を追加するとこのようになります。

 変数 $databaseType には、コードの最初の方で予め "FMPro9" もしくは "FMPro5/6" のいずれかを設定しておきます。こうしておくことによって、使用するデータソースに応じて処理を切り替えられるので便利です。
 ソースの詳細は、サンプルコードをご覧になってみてください。

 先に PHP ソースについて解説しましたが、最後に FileMaker Pro 5.x/6 データベースファイルの作成と設定方法について説明します。

1. データベースファイルを作成します。FileMaker Pro 5.x/6 を起動し、Comment.fp5 というファイルを作成し、以下のフィールドを作成します。

 [RecID]、[作成日]、[作成アカウント]、[修正日]、[修正アカウント]は管理用のフィールドですが、作成しておくと便利でしょう。

2. レイアウト名を cgi に変更します。
3. 「アプリケーション環境設定」ダイアログを出し、プラグイン一覧より、Web コンパニオンにチェックを付けて「設定」ダイアログを開きます。

 セキュリティに「ファイルメーカー Pro アクセス権」を指定し、TCP/IP ポート番号に 80、もしくは 591 を指定します。

4. ファイルの共有設定で、以下のようにチェックを付けることによって Web コンパニオンを公開します。


5. パスワードを指定します。図のように、web というパスワードを作成し、web で公開させる最低限のアクセス権を決めます。

 この他にフルアクセスを許可するパスワードが必要となりますので、ここでは Admin を作成してあります。

 以上で準備が整いました。
 FMPro5/6 用の設定を施した comment_fp5.php というファイルをサンプルに用意してありますので、参照してみてください。

参考: FX.php vs FileMaker API Benchmarks Discussion(英文)

2008-07-03

【応用その1】FX.php を使ったアンケートフォーム作成

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

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


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

 さて、前回まで 4 回にわたって FileMaker API for PHP によるアンケートフォームの作成方法を解説してきましたが、今回はさらに FX.php による FileMaker データベースアクセス機能も実装してみることにします。

 FX.phpiViking.org によって無償で提供されている FileMaker アクセスクラス群で、FileMaker Pro 5~ 9 に幅広く対応しているため、FileMaker API for PHP が実現できない環境のユーザでも FX.php を使うことによって php からのアクセスが可能となります。

 インストール方法も簡単で、ダウンロードして解凍した FX フォルダを Web サーバの適当な場所に配置するだけです。

 それでは実際にやってみましょう。
 Comment.fp7 を開き、「アカウントとアクセス権の管理」ダイアログを出し、そこからすでに登録済の Webuser を選択して「アクセス権セット...」を選択して以下のダイアログを開きます。

 FX.php は xml によるデータアクセスを行いますので、反転部分のように、「XML Web 公開でのアクセス- FMS のみ(fmxml)」にチェックを付けて保存します。

 これで FileMaker の FX.php 向け Web 公開の準備が整いました。

 さて、次は FX.php 向けのコードを追加していきます。
 まずは、コードの最初の方で FX.php をロードします。今ある Comment.php から FX.php が辿れるように設定してください。

 require_once '../../FX/FX.php';

 そしていつものように、日本語で手順を考えてみます。

  1. FX を使用することを宣言する(FX インスタンスを作成する)。

  2. 使用するデータベース名とレイアウト名を指定する。

  3. 使用するユーザ名とパスワードを指定する。

  4. 追加するフィールドと、そのデータを指定する。

  5. レコード追加を実行する。

 
 こうして見てみると、前回のデータベース書込手順とほとんど変わらないことがわかりますね。
 あとは上記の内容を FX.php 向けに書き換えていくだけです。

 一行目のデータベース接続にサーバ名、ポート番号、データソース名(FMpro9)を明示的に指定する必要がありますが、その他メソッド名に差異はあるものの、前回の FileMaker API for PHP のコードとさほど形式が変わらないことがおわかりいただけるでしょう。

 サンプルコードの方に FX.php と FileMaker API for PHP の切り替え操作も盛り込んでありますので、併せて確認してみてください。


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

2008-07-02

FileMaker API for PHP を使ったアンケートフォーム作成 (4/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 ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 さて、今回がアンケートフォーム作成の最終回となります。
 ステップ 1 から渡ってきたユーザ入力データをここでデータベースに登録し、続いてその内容をメール送信します。

 コードの記述に入る前に、FileMaker データベースを用意する必要があります。
 以下の手順に従ってください。

1. FileMaker Pro 9 よりComment.fp7 という名前のファイルを新規作成します。
2. 以下の図を参考にしながらフィールドを作成します。

 アンケート入力ページで実際に使用するのは、[氏名]、[email]、[回答]、[その他回答]、[意見など]の5 つだけですが、残りのフィールドはデータベースを管理する際に作っておくと便利ですので、最初の段階で用意しておきます。
3. 「アカウントとアクセス権」ダイアログを開き、webuser というユーザを追加します。
 パスワードを入力(サンプルデータベースでは web となっています)し、[アクセス権セット]では、「新規アクセス権セット...」を選択します。以下のように入力していきます。

 ここで最も重要なのは、ダイアログの一番下に表示されている[PHP Web 公開でのアクセス - FMS のみ (fmphp)]にチェックが付いていることです。これによって、FileMaker Server 9 への PHP によるアクセスを有効にします。
 また、[レコード]の欄で「カスタムアクセス権...」を選択することによって、レコードへのアクセス範囲を設定することもできます(任意)。
4. デフォルトのレイアウト名が Comment になっていますので、cgi に変更します。
5. ここまで終わったら、このデータベースファイルを FMS9 の Databases フォルダに入れて公開します。

 これでデータベースの準備が整いましたので、今度はアンケート入力の PHP コードの方に Comment データベース書き込みの処理を追加していきます。

まずは、コードの最初の方で FileMaker.php をロードします。

 require_once 'FileMaker.php';

 API for PHP による FileMaker データベースへのデータ書き込み手順を日本語で書くと、次のようになります。

  1. FileMaker を使用することを宣言する(FileMaker インスタンスを作成する)。

  2. 使用するデータベース名、レイアウト名、ユーザ名、パスワードを指定する。

  3. レコード追加をこれから行うことを宣言する。

  4. 追加するフィールドと、そのデータを指定する。

  5. レコード追加を実行する。


 このように日本語で書いてみると、操作は思ったより単純であることがわかりますね。
 あとは上記の内容を PHP の記述規則に従って置き換えるだけです。

 日本語で何をやっているかが理解できれば、この PHP ソースも容易に理解できるでしょう。
 $databaseName、$layoutName、$userName、$passWord というように変数を用意しておくことで、後でデータベース名や、ユーザ名、パスワードが変更になったときにも柔軟に対応できるようになっています。
 一番最後の行の $newrec->execute(); で実際に FileMaker データベースの方にレコードを新規追加します。

 最後にメール送信機能を追加します。
 すでにご存じのように、メールは差出人(From)、宛先(To)、件名(Subject)、本文(Body)、ヘッダ情報で成り立っています。これと同様の指定をコーディングの中でも行います。後でいつでも変更できるように、以下のように変数に入れておくと便利です。
 


 宛先(To)はアンケートに回答してくれた人のメールアドレスになりますので、ここでは指定しません。
 アンケート回答者にメールを送信すると同時にそのコピーをサーバ管理者に送るようにするには、上記のように $bcc 変数を用意して、そこにコピーを送るメールアドレスを設定しておきます。

 それでは実際にメールを送信するための手順を日本語で書いてみます。

  1. メールヘッダを組み立てる。

  2. アンケートに対するユーザ回答を使って本文を組み立てる。

  3. メール送信時に発生する文字化け対策を施す。

  4. 上記の内容を使ってメールを送信する。


 上記を PHP で置き換えると、次のようになります。


 $_POST の中にユーザ入力の内容が納められていますので、その中から該当するものを取り出しながら本文を組み立て、mb_sendmail() 関数の To の部分に回答者のメールアドレス $_POST['email']を設定します。

 上記を踏まえながら、サンプルコードを確認し、Comment.fp7 データベースをお使いの FMS9 環境に配置して、動作を確認してみてください。

 これで、FileMaker API for PHP による FileMaker データベースへの書き込み操作がひととおりできるようになりました。

 あとは、ステップ 1 のときと同様に、渡ってきたデータをお礼ページに表示するだけです。
 詳細は、サンプルコードを参照してみてください。

*サンプルデータベースの Admin パスワードは「admin」、webuser パスワードは「web」となっております。必要に応じて変更してお使いください。

●まとめ
 FileMaker データベースへのデータ書込の理解
 メール送信の理解

SonicWALL (4) --- IPS

前回「SonicWALL (2) --- IPS」で書いた警告メールの続きです。


IPS Detection Alert: IM Skype -- Application Activity, SID: 2800, 優先順位: 低 - 192.168.*.*, 4787, LAN - 204.9.163.158, 80, WAN, 163-158.static.quiettouch.com -
Skype を使用していると普通に送られてくる警告メール。 Skypeの利用を許可している環境では問題無い、Skypeに何らかの穴が見つからない限りですが。 ViewPointでは攻撃としては認識されていない。詳細解説


IPS Detection Alert: POLICY Google SSL Connections, SID: 3075, 優先順位: 低 - 209.85.171.97, 443, WAN, cg-in-f97.google.com - 192.168.*.*, 1774, LAN, **** -
Google Talkがクライアントと行うSSL通信をブロックしている。ViewPointでは攻撃として認識されない。 詳細解説


IPS Detection Alert: DNS BIND Version UDP Request, SID: 143, 優先順位: 低 - 149.20.52.206, 64457, WAN - 192.168.*.*, 53, LAN, **** -
DNSバージョンをチェックするクエリ。通常は無視していいが、自社のネットワーク情報を知られる可能性もある。 詳細解説


IPS Detection Alert: IM AIM -- Login, SID: 102, 優先順位: 低 - 192.168.*.*, 1253, LAN, **** - 64.12.161.185, 5190, WAN -
IPS Detection Alert: IM AIM -- Instant Message Sent, SID: 103, 優先順位: 低 - 192.168.*.*, 3749, LAN, **** - 205.188.12.130, 5190, WAN -
AIMを使用したログイン、またはメッセージ送信の発生を通知する。AIMの利用を許可している場合は無視。 詳細解説 詳細解説 


IPS Detection Alert: MULTIMEDIA Flash Video (FLV) Download 3, SID: 78, 優先順位: 低 - *.*.*.*, 80, WAN - 192.168.*.*, 4752, LAN, **** -
Flash Video (FLV)はYouTube等で使用されるビデオフォーマット、これをダウンロードしたときに通知される。 詳細解説


IP spoof dropped - 192.168.*.*, 4388, LAN - 205.188.179.233, 5190, WAN - MAC address: 00:90:cc:c3:06:49
以下、SonicWallのマニュアルから引用
「IP Spoof は、ハッカーが他のコンピュータのアドレスを使って、TCP/IP パケットを送ろうとする、侵入の企てです。保護されたネットワークに、そのネットワーク上のマシンの IP アドレスを使ってアクセスするために利用されます。SonicWALL では、これを侵入の企てとして認識し、それらのパケットを破棄します。SonicWALL の構成が間違っていると、IP Spoof の警告がログされることがよくあります。IP Spoof の警告
を見つけた場合には、LAN、WAN および DMZ 上の IP アドレスがすべて正しいことを確認してください。LAN 上の IP アドレスが LAN のサブネットに入らない場合にもIP Spoof の警告が出ることがあります。」


IPS Detection Alert: SMTP Reply-To Pipe Passthrough, SID: 1888, 優先順位: 低 - 194.150.164.130, 29174, WAN - 192.168.*.*, 25, LAN, -
旧Sendmailのバグを利用してコマンドを実行させる攻撃の可能性。SonicWallはこの攻撃を排除する。 詳細解説

以上

2008-07-01

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

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

 前回はアンケートページ操作の枠組みとなる、アンケート入力ページ、確認ページ、そしてお礼ページの切替方法について説明しました。いよいよ本格的なコード記述に入っていきます。PHP のコーディング規則については割愛しておりますので、不明な点があれば PHP のマニュアルを参照してください。

 皆さんご存じのとおり、Web ページの構成はざっと以下のようになっています。



 前回の説明では、本文部分の表示切替について説明したわけですが、実際は、本文を表示する前にヘッダを表示し、本文の表示が終わったところでフッタを表示することによって、Web ページを構成する必要があります。第一回目で、ヘッダとフッタは部品化できると申し上げたとおり、ヘッダとフッタをそれぞれ独立した文字列として変数にセットしておくことで、実際のページ表示を行うときに呼び出して使うことができます。
 以下はその部分を取り出したものですが、HTML による Web ページ作成経験がある方なら、この部分は容易に想像できるでしょう。

 ●ヘッダ部品のソース


ヘッダ中にある $pagetitle は、ページのタイトルを表示するための変数です。入力ページ、確認ページ、お礼ページでタイトルを切り替えることができるため、このようにしておくと便利です。

 ●フッタ部品のソース


 このように部品を用意しておけば、極端な話、PHP コードの中で以下のように記述するだけで一つの Web ページが出来上がります。


echo $header;
echo $footer;


 次に、上記のヘッダとフッタの間に入れる本文部分を検討していきます。

1. ステップ 0 (ユーザ入力ページ)

 ここでは、入力用のフォームを作っていきます。
 フォーム部品(エレメント)は次の 5 つです。

 氏名 -- テキストボックス (myname というエレメント名)
 email -- テキストボックス (email というエレメント名)
 アンケート回答 -- ラジオボタン (answer というエレメント名)
 その他回答 -- テキストボックス (otheranswer というエレメント名)
 ご意見など -- テキストエリア (memo というエレメント名)

 以下は上記を踏まえてフォームを起こすためのコードを PHP で記述したものです。



 上記赤で囲った部分がアンケート回答の選択肢を示すラジオボタンです。これですと、アンケート回答の選択肢が増えるたびにラジオボタン行を増やす必要があるため、将来的に非効率といえば非効率です。というわけで、このラジオボタンの部分を可変対応にしてみましょう。

 そこで選択肢のリスト作って変数に入れてみます。ここでは $answeroptions という変数にリストを配列としてセットしているところです。



 そして、ラジオボタンを表示したいところでこの変数($answeroptions)を呼び出して、各項目を取り出します。その加工を行っているのがこの部分です。



これでデフォルトのページの部品ができあがりました。しかし、これでは各エレメントの value が空欄のため、前回何らかのユーザ入力が行われていたとしても値はページには反映されません。そこで、前回ユーザ入力があった場合にはその値を当該の項目に表示する処理を追加します。
 この処理を施すと、次のようになります。赤線部分に注目してください。



 そしてさらに、必須項目である[氏名]欄と[email]欄が正しく入力されているかどうかをチェックして、値が不正の場合には赤字でメッセージを表示するようにします。
 その処理を施したものが以下のソースです。赤線部分に注目してください。



 入力項目の処理はこれで終わりですが、後は今のステップ番号を次の操作のためにどこかに用意しておく必要があります。
 ここでは以下のような隠しエレメントを用意して、そこにステップ番号を入れることにします。エレメントの名前は後で参照しやすいように page_flg としておきます。今回はステップ 0 (ユーザ入力フォーム)なので、設定しておく値は 0 ですね。



 後は送信ボタンとリセットボタンを用意するだけです。
 上記を踏まえて、もう一度サンプルコードを見てみてください。

2. ステップ 1 (確認ページ)
 このステップは、ステップ 0 に比べると比較的処理が容易です。ここでは、ステップ 0 で入力された値 ($_POST にまとめて入っています)を取り出してページに表示し、ユーザにこの内容でデータベースに送信しても良いか尋ねて、ステップ 2 に入力値を渡すだけです。

 まずは入力された値を表示します。この部分は、確認ページとお礼ページの両方で同じものを表示しますので、使い回すことができます。


 次に、ステップ 2 (お礼ページ)に渡すためのユーザ入力値を隠しエレメントとしてフォームに用意します。
 以下、赤線を引いた箇所が現在のステップ番号を渡しているところです。



 実際にサンプルコードのソースを開いてみて、この部分を確認してみてください。

 残すはステップ 2 です。ステップ 2 では、データベース操作およびメール送信について触れますので、次回詳しく説明いたします。

●まとめ
 入力フォームの記述方法とユーザ入力値の表示方法の理解

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

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

 さて、前回の説明ではアンケートページの流れと、流用可能部分の洗い出しを行いました。

 以降、PHP を使って話を進めていきますが、実際にコードを書く前に、まずは日本語で分岐処理を考えてみましょう。この作業がしっかりできれば、あとはそれを PHP の規則に従って置き換えるだけです。このやり方ならあらゆるプログラミング言語にも応用が利くので便利です。

 ページがロードされたときに、最初にしなければならないのは、このページが初回ロード(デフォルトページ)なのか、確認用ページなのか、それともお礼ページなのかを把握することです。そこで前回解説した 3 つのステップが登場するわけです。


 0 -- 初回ロード時(デフォルト)ユーザによるアンケート入力用ページ
 1 -- 確認ページ
2 -- お礼ページ

 ここで注目すべきことは、ユーザが正しい入力を行わなければ、いつまでたってもステップ 1 には進めないということです。今回のアンケートフォームでは、このために[氏名]欄と[email]欄を入力必須としています。この二つの項目正しい入力がなければ、誰が送ったのか後で判断できませんし、メールも送信できなくなってしまいます。また、ゴミデータを増やす原因にもなりますので、最低限[氏名]と[email]には入力をしてもらいたいところです。

 つまり、ステップ 0 ではユーザ入力ページを表示させつつ、正しい入力が行われているかどうかという判断も行います。

 ページがロードされた場合に、[氏名]欄と[email]欄に正しいデータ入力が行われていたときは、必要最低限の情報が揃ったことになりますので、ステップ 1 に進みます。

 さらにページがロードされた場合に、前回のユーザ操作で“確定”ボタンが押されていたことを確認できたときは、ステップ 2 に進んでデータを FileMaker データベースに書き込み、さらにメールを送信して終了します。

 実際にコード記述を行う際には、ステップにプログラム内で管理しやすい固有の名前を付けます。ここでは page_flg としてみます。page_flg が 0 ならステップ 0 というわけです。PHP では変数を取る場合は先頭に $ を付けますので $page_flg という名前になります。

 それではここまでを日本語で表現してみます。見やすさのために、各項目内はインデントを行います。ステップの名前は page_flg となっていますので、覚えておいてください。



   
 上記のように、ページがロードされた直後の処理が最も重要であることがわかりますね。page_flg の番号が特定できれば、あとはそれに応じたフォームを表示するだけです。
 さて、次はこれらの分岐を PHP に置き換えてみます。処理の詳細はまだ記述しませんので、コメント行として日本語で表します。先ほど申し上げたとおり、page_flg は PHP では $page_flg と記述します。



 分岐の方法や入力されたフォームの値($_POST に入っています)の説明は PHP のマニュアルをご覧いただくとして、こうして見てみると、処理の流れが意外と単純であることがわかりますね。ちなみに、Mailck()という名前の付いているものは、入力されたメールアドレスが適切な形式であるかどうかをチェックするために私が用意したユーザ定義関数の名前です。

 この枠組みができれば、あとはページヘッダ、フッタ、そしてフォームの詳細を追加していくだけです。
また、前回の説明にあったように、確認ページとお礼ページのコードは流用できる部分があるため、$page_flg の分岐を以下のように変更します。



 コードがさらにすっきりましたね。

 ここで、サンプルコードをダウンロードして、該当箇所を検索し、コードがどのようになっているかを調べてみてください。
 フォーム内容が記述されているため、PHP に不慣れな方には複雑に見えるとは思いますが、この枠組みが理解できていれば、今回のアンケートフォームの操作は 70% 理解できたと言っても過言ではないでしょう。

●まとめ
 ページ操作の枠組みとその記述方法(日本語、PHP)の理解

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 を使ってコーディングをしていきます。