2005/1/28:FX.phpでの日本語利用状況は、FileMaker 7でいろいろ変化し、FX_charsetというFXのラッパークラスでの運用と、そのままで使う方法があるといった状況となりました。そこでページはすべてリニューアルし、こちらのページとなっています。このページは、従来の情報を残しておくためのもので、最新のページは前のリンクをクリックしてご覧ください。

FX.php日本語対応版

更新
新居雅行(msyk@msyk.net)

iVikingより配布しているFX.phpは、PHPからファイルメーカーProのデータベースに接続するためのライブラリクラスです。ただし、そのままでは日本語の扱いに問題があるため、FX.phpを改造して日本語で問題がないようにしたものをここで配布します。

比較的最近の話題

2004年8月末に、フェニックスでFileMaker Developer Conference 2004がありました。そこで、FX.phpの開発もとであるiViking.orgがブースを出展していたので、訪問してChris Hansenと記念写真をとりました。ブースはほとんど彼一人が3日間やっていたので、大変だったでしょう。

DevCon 2004ではFileMaker 7シリーズ系列のしんがり登場となる「FileMaker Server 7 Advanced」がリリースとなりましたが、iViking.orgではさっそく、FX.php Ver.3.0として、FileMaker Server 7 Advanced対応版をリリースしています。どうやら、USAのFSAの一部には発売前にソフトがシードとして配布されるようなので、こうした対応ができますね。さっそく、Ver.3.0の日本語化を開始しています。仕組みは変わっていないので、すぐにできると思います。ちなみに、写真では顔を揃えていますが、彼は座っていて、私は立っています(笑)。アメリカ人の雑踏の中からでも首が出ているくらいChrisは背が高いのです。(2004/9/1)

FX.phpを使う方法

FX.phpをダウンロードしてインストールしてください。

加えて、日本語化修正ファイルの部分をクリックしてダウンロードして解凍してください。FX.php、index.php、detail.php、Book_List.fp5の4つのファイルがあります。それらをオリジナルのFXフォルダにコピーします。もとからあるものは上書きしてしまってください。(上書きによって欠け落ちる情報はないと思います。)

日本語化修正ファイル(FX.phpへの変更のみです)

基本的な使用方法

当然ですが、PHPが稼働するWebサーバをご用意していただく必要があります。また、mb_stringが利用できるようになっている必要があります。

FX自体は、FX.phpなどのいくつかのファイルからなるライブラリです。これらを含むFXフォルダを、Webサーバのドキュメント内の適当な位置に配置すればOKです。

ただし、サンプルのindex.phpでは、このライブラリのインクルードが「/FX/FX.php」となっていて、つまりはWebサーバのルートからの絶対パス指定になっています。結果的に、WebサーバのドキュメントフォルダのルートにFXフォルダを配置するのがいちばん手軽な方法となりますが、異なる場所にインストールする場合にはインクルードする部分の修正も必要に応じて行ってください。特にユーザディレクトリで、「~ユーザ名」がパスに入る場合は注意してください。

ファイルメーカーProでは、Webコンパニオンのプラグインを有効にします。アプリケーションのプレファレンスの設定にあります。サンプルのファイルBook_List.fp5は自動的に設定されていますが、通常のデータベースはさらにファイルの共有設定で、Webコンパニオンを有効にします。

サンプルの使い方

サンプルを利用するには、FX/index.phpを開きますが、その前に、Book_List.fp5を起動して開いた状態にしておきます。そして、index.phpを開きます。後は、検索や新規レコード作成ができることを確認してください。検索は前方一致になっています。

サンプルでは、detail.phpというファイルで、レコードの1つ1つを表示するページを構築していますが、そちらはRelease 1では「日本語化」されていません。日本語はちゃんと見えるのですが、ソースを見ると文字のコードがそのまま入っていない事が分かるかと思いますので、あえてそのままにしておきます。(といいつつ、Release 2では日本語化してしまいました。)

ライセンスについての注意

なお、この方法を使うと、WebサーバとファイルメーカーProを同一マシンにすれば、つまりはファイルメーカーProへのアクセスは127.0.0.1のIPアドレスからの接続だけになります。従って、Webサーバへの接続がどこからでも、ファイルメーカーへは127.0.0.1経由の接続だけになり、結果的にUnlimited版を購入しなくても、多数のユーザがWeb経由で接続が可能です。しかしながら、こうした使い方は使用許諾上許されていませんので、10ユーザ以上の利用がある場合は、ファイルメーカーProはUnlimited版をご利用ください。

Windows版でのmb_string

日本語文字変換では、mb_stringを使っています。LinuxなどUNIX系のみなさんは、ぜひとも、mb_stringをコンパイル時に指定するか、指定してビルドされたものを使ってください。もっとも、コード変換部分はiconvで置き換えは可能とは思います。

Windows版のPHPでは、mb_stringにネイティブのライブラリを使うようです。mb_stringの部分で「関数がない」というエラーが出る場合には、たとえば、次の点などをよく確認してください。

phpの設定が入っているphp.iniにある以下の行を有効に(行頭に;がない状態に)してみてください。php.iniファイルはphpinfo()コマンドで表示される情報に書き込まれていますが、たとえば、c:\apache\apache\php.iniなどとなっているようです。

extension_dir = "c:/php/extensions/"
extension=php_mbstring.dll

日本語版FX.phpとオリジナル版の違い

PHPで日本語サイトを作る方は、おそらく文字セット(文字コード)はEUCを使われると思います。もちろん、metaタグでの指定がありますが、PHPの場合はHTTPのヘッダに情報を追加できるので、以下のステートメントをページの冒頭に実行されるようにしておくのがおすすめです。

header('Content-Type: text/html;charset=EUC-JP');

そして、オリジナルのFX.phpには存在しない2つの関数を呼び出してください。以下は、index.phpからの抜粋です。

$BookQuery = new FX($serverIP, $webCompanionPort);
$BookQuery->SetCharacterEncoding('EUC-JP');
$BookQuery->SetDataParamsEncoding('SJIS');

SetCharacterEncodingメソッドは、PHPのスクリプトから、FXに引き渡される文字列、あるいは逆の文字列の文字セット名を記述します。FXは内部的にはUTF-8なのですが、Latin-1ではない範囲の文字は、#xxxxxxの記述にします。SetCharacterEncodingでFXとPHPスクリプト間の文字セット指定をする事でそうした変換は行わずに、その都度適切に文字列が引き渡されます。

SetDataParamsEncodingは、FX.phpとファイルメーカーPro間での文字セットを指定します。もしかしたら、WindowsでファイルメーカーProを動かす場合は、SJIS-winがいいのかもしれません。いずれにしても、「Shift_JIS」というキーワードはmb_stringが対応していません。FX内部ではUTF-8が原則ですが、それをこのメソッドで指定した文字セットに変換し、URLエンコードしてファイルメーカーProにポストするという流れになるようになっています。ファイルメーカーPro 6までの日本語版を使う場合は、いずれにしてもここでShift-JISを指定する必要があります。

なお、SetCharacterEncodingとSetDataParamsEncodingを指定しない場合は、オリジナルと一切違わない動作にするようにしていますが、これは、FX.php側に統合しやすくしているためです。FX.phpのクラス定義にある該当する変数を最初からECU-JPやSJISにしてしまえばメソッドの呼び出しは必要なくなります。

ほかには、FX.phpの使い方に違いはありません。

サンプルのデータベースのBook_List.fp5ですが、テキストフィールドの言語を「日本語」に変更しています。そうしないと、検索はうまくできません。また、フォーム上のテキストフィールドのフォントも日本語のものにしています。Mac OS Xで設定したのですが、Windowsでもとりあえずシステムフォントで表示されるようです。それから、日本語でのレコードを1つ作ってあります。宣伝臭いのはお許しを(笑)。

FX.phpの文字コード処理

FX.phpに日本語処理の問題があるかどうかは微妙なところです。たとえば、ファイルメーカーProから引っ張りだしたデータは、PHP側にはUTF-8で得られます。オリジナルのFX.phpは、ASCIIコードで0x80以上のバイトシーケンスを、#xxxxxの形式にしてしまいます。そのため、コード的にはOKなので、ブラウザでは日本語は日本語として見えています。しかしながら、ページの文字セットはISO-8859-1で、ソースを見ると日本語部分は#xxxxxのようになっています。これは「問題」か、「問題ではない」か、微妙ですが、日本人プログラマとしては気持ちのいい状態ではないでしょう。

一方、FX.phpはPHPからファイルメーカー側へのデータ送信時には特にコード変換は何もしません。そのため、もしかすると、PHP側をShift JISコードで処理すればいいのかもしれませんが、それとてやはり釈然としない感じがします。また、今までの経緯もありますから、PHPのスクリプトはEUCで書きたい気が強くするところでしょう。結果的にきちんと「何のコードか」ということを記述しながらプログラムをする方が、後々のことを考えればいいのではないかと考えます。

そういう理由でFX.phpの内部を解析して、「文字コードを指定する」ということを可能にしました。

いろいろなお話