MessagePack for PHP@Webホスティング

先日 phpのserializeを使うより高速でサイズもコンパクトに仕上げる「MessagePack」とPHP拡張 でも紹介されている MessagePack for PHP ですが、Webホスティングサービスにも標準で組み込まれ始めているようです:


MessagePackはオープンソースで開発が進んでいるプロジェクトです。そして各言語版はそれぞれの言語のエキスパートによって実装されるという形態になっています(自然にそうなったのですが^^;)。
PHP版はadvectさんによる実装です。


実はPHP版には以前に別の実装があり、advectさんから新しい実装が送られてきたときは 2,3回くらい提案された実装を全部リジェクトした という経緯があるのですが(笑)、最終的に取り込まれている現在の実装は、非常に高品質になっています。
性能的にはまだ酔狂にチューニングできる余地がありそうですが、テストケースが充実しており、機能的には安心して使える品質かと思います。


コードを読むと、どうやらセッションのシリアライザを置き換える機能も実装されているようです。
php.ini に session.serialize_handler = msgpack と書くと、セッションにオブジェクトを保存する際にMessagePackでシリアライズされるようになるようです。


ここで、MessagePackではクラスをシリアライズする場合は「配列」としてシリアライズするという規約があります。つまりメンバ変数の変数名は保存されないというわけです。

しかしPHP版の実装では、デフォルトで「連想配列」としてシリアライズされるようになっています。つまり変数名まで保存されます。これはPHPだけで使う場合には非常に便利なのですが、JavaRubyなど他の言語とインスタンスをやりとりしたい場合に問題になることがあります。
そういう場合には、php.ini に msgpack.php_only = 0 と書くと良いようです。

また、msgpack.error_display = 0 という設定項目もあります。


Enjoy MessagePack!