FX.php日本語対応版/FX_charset

更新
新居雅行/msyk@msyk.net

iVikingより配布しているFX.phpは、PHPからFileMaker Proのデータベースに接続するためのライブラリクラスです。FileMaker 7になってUnicode対応がWeb側にも行われ、FX.phpをそのまま使うことも可能で、その方法も紹介しましょう。しかしながら、FileMakerのデータベースから取り出した文字列をPHPで処理をしたい場合などに問題が発生します。そこで、非アスキーコード文字列対応のラッパークラスFX_charsetを利用することで問題は解決します。

比較的最近の話題

PHPからFileMakerのデータベース処理を可能にするクラス「FX.php」のVer.4.0がリリースされました。このバージョンから、私の作った「日本語対応」部分が統合され、FX.phpだけで入出力部分のエンコードを指定できるようになっています。

Ver.4.0のChanges.txtの2項目目に私の名前が出ています。オープンソースソフトにいくらかでも貢献できたことにうれしく思うと同時に、このことは日本のFileMakerコミュニティでFX.phpを使っているみなさんの成果でもあります。これからもよろしくお願いします。(2005/8/14)

なお、Ver.4.0については、とりあえずはこのページにあるファイルはダウンロードしないで、本家のiViking.orgのFX.phpだけをダウンロードして利用できるはずです。よってこのページの内容は近々に修正をすることになるかと思います。

基本的な使用方法

FX_charset(FX.php Ver.3.1対応)をダウンロードしてください。FX.php自体は再配布が可能なライセンスなので、この中に含めました。

PHPが稼働するWebサーバをご用意していただく必要があります。また、mb_stringが利用できるようになっている必要があります。なお、開発やテストは、Apache 1.3.33/PHP 4.3.2(Mac OS X v10.3.7)で行っています。

FX_charsetフォルダを、Webサーバのドキュメント内の適当な位置に配置すればOKです。

ライブラリの本体は、FX_charsetフォルダにあるFX_charset.phpです。これはラッパークラスで、FX.php自体は、FX_charset.phpと同じフォルダにあるFXフォルダに入っています。このフォルダ構成で稼働させるのが既定値ですが、もちろん、別ファイルの参照部分はPHPのプログラムソースを変更することで自由に変えて利用できます。

稼働環境について

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

サンプルの使用方法

サンプルとして、書籍のデータベースがあって、それを一覧表示したり、入力、検索、詳細表示ができるようなPHPのソースが付属しています。オリジナルのFX.phpにあったものを改良しましたが、FileMaker 7のみのデータベースです。必要なアクセス権設定をしています。ただし、[完全アクセス]が可能なadminアカウントにはパスワードをかけていませんし、ゲストも[完全アクセス]となりますので、実際の運用ではご注意ください。

データベースファイルのBook_List.fp7を、FileMaker Server 7で公開します。さらに、FileMaker Server 7 AdvancedのWeb公開エンジンを稼働させて、このデータベースへXMLアクセスが可能になるようにします。

/FX_charset/index-utf8.phpを開きます(もちろん、配置した場所に応じてホスト名やパス名を付けて正しいURLでアクセスをしてください)。書籍のリストが見えていればOKです。書籍名のリンクをクリックすると、書籍の詳細ページ(detail-utf8.php)に移動します。入力や検索も、通常とおり日本語についても可能なので、試してみてください。

ファイルメーカーPro 6で利用する場合

サンプルをファイルメーカーPro 6で使う場合、詳細表示の画面で画像がそのままでは出てきません。そこで、detail-*.phpファイルの一部を修正してください。以下のように、赤い文字のスラッシュを追加してください。「cover_art 」で検索すれば、その場所がすぐに分かると思います。(お知らせいただいた森さん、ありがとうございます。)

	<td align="center" valign="center" bgcolor="#FFFFFF" width="125" rowspan="4">
		<img src="<?php echo "http://$serverIP:$webCompanionPort/" . 
			$BookData['data'][$currentKey]['cover_art'][0]; ?>" 
			width="200">
	</td>

PHPのプログラムの作成方法

本当はFX.php自体の詳しい使い方を日本語でご紹介しないといけないのですが、とりあえず、オリジナルの英語の文書をご覧ください。その上で、FX_charset.phpの使い方を紹介します。

FX.phpとFX_charset.phpの違い

サンプルのデータベースを使って、FXとFX_charsetの違いが分かるようにしました。書籍の一覧から、書籍名をクリックして、詳細ページに移動します。そのとき、TitileフィールドのデータをPHPで1文字ずつに分割した結果を表の下に表示します。日本語の書籍名の「メールシステムの作り方大全」(手前味噌ですみません…)をクリックしてください。

detail-utf8.phpは、FX_charsetを使ってUTF-8ベースで稼働させています。そのため、データベースから得られた文字列は、UTF-8形式の文字列です。そのため、1文字目は「メ」、3文字目は「ル」などと、mb_substr関数で得られる1文字と、データベースに記録される文字列の1文字は対応しています。

一方、index-fx.phpから書籍名のリンクをクリックして表示されるdetail-fx.phpにおいても、とりあえずは日本語は文字化けしませんし、入力や検索もうまく行きます。しかしながら、Titleフィールドの文字列を1文字ずつ取り扱うと、以下の図のようになります。たとえば、「メ」は、Unicodeではコードポイントとしては12513(0x30E1)ですので、文字列参照(character reference)形式だと「&#12513;」とソースコード上で展開されます。HTMLのソースに文字列参照が含まれている場合、ブラウザでレンダリングして正しく「メ」と表示されますので、単にブラウザ表示をする上では問題がありません。しかしながら、PHPで文字列として処理しようと思うとそのままではうまく行きません。もちろん、PHPで変換関数などを作る…という手段もあるかもしれませんが、FXのラッパーとして、普通に文字列が得られるようにしてみました。

FX.phpで日本語をきちんと処理する方法

FX_charsetではなくFXで日本語を利用する方法を説明しておきましょう。FileMaker Server 7 AdvancedではUnicode対応によりそれも可能です。一方、Ver.6までのファイルメーカーでの利用はできません。また、前記の問題がありますが、単にページ表示をしたいだけならFXでも問題はありません。

FX_charset.phpの使用方法の違い

FX_charsetはFXをもとにしているので、FXの機能はそのまま使えます。コンストラクタや、あるいはメソッドなどはすべてそのまま使えるはずです。加えて、外部仕様的には2つのメソッドを利用するようになっています。ただし、これらは常に使う訳ではありませんので、状況に合わせて設定をしてください。
追加メソッド解説
SetCharacterEncoding($encoding)データベースから得られたデータを、このメソッドの引数で指定した文字セット/エンコーディングの文字列に変換する。既定値はUTF-8。''を引数に指定すれば、FXと同様な動作になる。
SetDataParamsEncoding($encoding)データベースへのリクエストに含める文字列の文字セット/エンコーディングを指定する。既定値はUTF-8。''を引数に指定すれば、FXと同様な動作になる。

FX_charsetを使ってUTF-8のページを作成する場合

作成するPHPのページがUTF-8で稼働する場合には、以下の点を注意します。

FX_charsetを使ってEUCのページを作成する場合

作成するPHPのページがEUCで稼働する場合には、以下の点を注意します。

ファイルメーカーPro Ver.6まででの利用

ファイルメーカーPro Ver.6まで、あるいはUnlimited版で、日本語をきちんと使うには、FX_charsetが必須です。FX.phpでは、データベースの内容の参照しかできず、入力や検索などは思った通りに動きません。もともと、そのことがあってFXを日本語化したのですが、FX_charsetでも従来のファイルメーカーPro Ver.6で稼働するようにソースは残してあります。

ファイルメーカーPro 6までで使う場合には、Webコンパニオンをオンにして、データベースを公開します。そして、PHPのソースでは以下の点に気をつけます。

なお、UTF-8で使う場合は、ヘッダとSetCharacterEncodingの引数を、'utf8' にすればいいでしょう。

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

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


いろいろなお話