= PHPクライアントの作成 =

ここでは、既に*.thriftの定義を行い、--gen phpでPHP用のコードが生成されているものとする。
その上で、PHPコードからこれをクライアントとして使用する方法を見ていく。

== コードの用意 ==

[[http://thrift.apache.org/download/]]からダウンロードされたtar.gzを展開すると、lib/php中にREADMEドキュメントがある。
おおよその手順はここに記述されている。要点は以下

 * ThriftはPHP 5が必要。
 * lib/php/srcの内容をPHPアプリのコードベースにコピーする。
 * $GLOBALS['THRIFT_ROOT']がそのパスを示すように設定する。<<BR>>これを行わない場合には、自動的に設定されるが、dir(__FILE__)によって行うため、効率は若干悪くなる。
 * $GLOBALS['THRIFT_ROOT'].'Thrift.php'をinclude_onceする。<<BR>>これは他のThriftファイルをincludeする以前に行う必要がある。

*.thrift定義から生成されたphpファイルは、$GLOBALS['THRIFT_ROOT'].'packages/MyPackage/'以下に置く必要がある。
ここで、MyPackageは*.thriftファイルの名称になるようだ。

例えば、thriftのライブラリとsample.thriftから生成されたファイルは次のようなレイアウトになる。

{{{
トップ
 +-- Throft.php
 +-- autoload.php
 +-- extディレクトリ
 +-- protocolディレクトリ
 +-- serverディレクトリ
 +-- transportディレクトリ
 +-- packages (作成する)
      +-- sample (作成する)
           +-- 生成されたthriftファイル
}}}

== 呼び出し ==

クライアントとして呼び出しを行うには、すくなくとも以下が必要。sample.thriftに定義されたHelloインタフェースの場合。

require_once $GLOBALS['THRIFT_ROOT'].'Thrift.php';
require_once $GLOBALS['THRIFT_ROOT'].'transport/TSocket.php';
require_once $GLOBALS['THRIFT_ROOT'].'transport/TBufferedTransport.php';
require_once $GLOBALS['THRIFT_ROOT'].'protocol/TBinaryProtocol.php';
require_once $GLOBALS['THRIFT_ROOT'].'packages/sample/Hello.php';

    $socket = new TSocket(サーバホスト, ポート);
    $transport = new TBufferedTransport($socket, 1024, 1024);
    $hello = new HelloClient(new TBinaryProtocol($transport));
    $transport->open();