やや旧聞に属する話になるが、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公開」を使った方法に乗り換える必要がありそうだ。