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']がそのパスを示すように設定する。
これを行わない場合には、自動的に設定されるが、dir(FILE)によって行うため、効率は若干悪くなる。$GLOBALS['THRIFT_ROOT'].'Thrift.php'をinclude_onceする。
これは他の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();