やや旧聞に属する話になるが、FileMaker Pro 11とFileMaker Server 11が発売された。FileMaker Chartsによるグラフ描画、Quick Reports、Quick Findなどなど、さまざまなUIが強化された。FileMakerデベロッパ向けの機能も充実し、ユーザ・デベロッパ双方にとって有益なバージョンアップとなっている。

FileMaker Pro、FileMaker Pro Advancedは大幅な進化を遂げた。しかしFileMaker ServerのXML/XSLTによるWeb公開機能やPHPのライブラリなどのアップデートについてはとくにアナウンスがなかった。ここではFileMaker API for PHPの変更点を追ってみる。

同梱されているライブラリの差分をチェック

FileMaker Serverをインストールすると、特定のパスにFileMaker APIのPHPファイルセットがデプロイされる。

  • Windows : (インストールパス)\FileMaker Server\Web Publishing\publishing-engine\php\FileMaker
  • Mac : /Library/Web Publishing/publishing-engine/php/snow leopard/lib/php

これとは別に、ZIPパッケージのスタンドアロン版も用意されている。

  • Windows : (インストールパス)\FileMaker Server\Web Publishing\FM_API_for_PHP_Standalone.zip
  • Mac : /Library/Web Publishing/FM_API_for_PHP_Standalone.zip

Mac版FileMaker Serverに同梱されているスタンドアロン版ライブラリを比較する。比較するバージョンはFileMaker Server 10。

ファイル名 FileMaker Server バージョン サイズ md5
FM_API_for_PHP_Standalone.zip 10 85,282bytes ef23eaa52f5fd4b42da77a99ccaf4680
FM_API_for_PHP_Standalone.zip 11 85,334bytes 81f8cc1363fa76768cc98b365a2416b7

ZIPパッケージを解凍し、それぞれのディレクトリに対してdiffをおこなう。

% diff -u -r FM_API_for_PHP_Standalone_10 FM_API_for_PHP_Standalone_11

変更があったファイルは次のとおり。

  • FileMaker/Implementation/FileMakerImpl.php
  • FileMaker/Implementation/Parser/FMResultSet.php
  • FileMaker/conf/filemaker-api.php

FileMaker/Implementation/FileMakerImpl.php

diff -u -r FM_API_for_PHP_Standalone_10/FileMaker/Implementation/FileMakerImpl.php FM_API_for_PHP_Standalone_11/FileMaker/Implementation/FileMakerImpl.php
--- FM_API_for_PHP_Standalone_10/FileMaker/Implementation/FileMakerImpl.php     2008-09-24 18:48:06.000000000 +0900
+++ FM_API_for_PHP_Standalone_11/FileMaker/Implementation/FileMakerImpl.php     2009-12-19 02:11:24.000000000 +0900
@@ -332,7 +332,7 @@
 curl_setopt($Vd88fc6ed, CURLOPT_FAILONERROR, true);

  if ($this->getProperty('username')) {
- $V313225f0 = base64_encode($this->getProperty('username'). ':' . $this->getProperty('password'));
+ $V313225f0 = base64_encode(utf8_decode($this->getProperty('username')). ':' . utf8_decode($this->getProperty('password')));
 $V44914468 = 'X-FMI-PE-Authorization: Basic ' . $V313225f0;
 curl_setopt($Vd88fc6ed, CURLOPT_HTTPHEADER, array('X-FMI-PE-ExtendedPrivilege: tU+xR2RSsdk=', $V44914468));
 }else{

execute()実行時に、ユーザ名とパスワードをutf8_decode()するように。

FileMaker/Implementation/Parser/FMResultSet.php

diff -u -r FM_API_for_PHP_Standalone_10/FileMaker/Implementation/Parser/FMResultSet.php FM_API_for_PHP_Standalone_11/FileMaker/Implementation/Parser/FMResultSet.php
--- FM_API_for_PHP_Standalone_10/FileMaker/Implementation/Parser/FMResultSet.php        2008-09-24 18:48:06.000000000 +0900
+++ FM_API_for_PHP_Standalone_11/FileMaker/Implementation/Parser/FMResultSet.php        2009-12-19 02:11:24.000000000 +0900
@@ -269,7 +269,7 @@
  $this->V26005321= null;
 break;
 case 'data':
- $this->V43432a31['fields'][$this->V26005321][] = trim($this->V6468d939);
+ $this->V43432a31['fields'][$this->V26005321][] = $this->V6468d939;
 $this->V6468d939= null;
 break;
 }

fmresultset形式のXMLを出力時、data要素をtrim()しないように。

FileMaker/conf/filemaker-api.php

diff -u -r FM_API_for_PHP_Standalone_10/FileMaker/conf/filemaker-api.php FM_API_for_PHP_Standalone_11/FileMaker/conf/filemaker-api.php
--- FM_API_for_PHP_Standalone_10/FileMaker/conf/filemaker-api.php       2008-09-24 18:48:06.000000000 +0900
+++ FM_API_for_PHP_Standalone_11/FileMaker/conf/filemaker-api.php       2009-12-19 02:11:24.000000000 +0900
@@ -23,10 +23,10 @@
 $__FM_CONFIG['logLevel'] = FILEMAKER_LOG_ERR;

 /**
- * The default hostspec (http://localhost:80, for example). DO NOT
- * include /fmi/xml in this string.
+ * The default hostspec (http://127.0.0.1:80, for example). Avoid using http://localhost:80/
+ * as it can cause peformance loss. DO NOT include /fmi/xml in this string.
  */
-$__FM_CONFIG['hostspec'] = 'http://localhost';
+$__FM_CONFIG['hostspec'] = 'http://127.0.0.1';

 /**
  * Specify any additional curl options - SSL certificates, etc. - in

接続先ホストを"localhost:80"から"127.0.0.1"に変更。該当部分では「http://localhost:80/の場合、パフォーマンスロスが発生するので使用しないように」と追記がおこなわれている。

いくつかの更新がおこなわれているものの、グラフといった強力な機能が用意されたFileMaker Pro/Advancedと比較するとやや見劣りする内容だ。FileMakerを使用したWebアプリにおいて、もっともネックになる箇所「ソート時間」についても、残念ながら目立ったパフォーマンスアップはなかった。FileMaker Serverを10から11にアップグレードして既存Webアプリがいままでと違う動作をするようになった場合、FileMakerの関数名のほか、上記3点をチェックしておこう。

今回比較したのはPHPのみ。Apacheのコンフィグファイルやその他設定ファイルの変更点について興味がある方は、diffで比較されたい。

FileMaker Web公開方法のひとつ、XSLTが非推奨に

FileMaker Serverではいままで「インスタントWeb公開」「XMLによるカスタムWeb公開」「XSLTによるカスタムWeb公開」「PHPによるカスタムWeb公開」の4つをサポートしてきた。今回これらのうち、「XSLTによるカスタムWeb公開」が非推奨となった。Deprecation of XSLT API for Custom Web Publishingによると、次期バージョンにおいてこの機能は利用できなくなる予定とのこと。既存Webアプリでこの機能を使用している場合、FX.phpやFileMaker API for PHP、PyFileMakerといった「XML/PHPによるカスタムWeb公開」を使った方法に乗り換える必要がありそうだ。