Thrift PHP/Apache Integration

Thrift is distributed under the Thrift open source software license.
Please see the included LICENSE file.

Building PHP Thrift Services with Apache
========================================

Thrift can be embedded in the Apache webserver with PHP installed. Sample
code is provided below. Note that to make requests to this type of server
you must use a THttpClient transport.

Sample Code
===========

<?php

/**
 * Example of how to build a Thrift server in Apache/PHP
 *
 */

$GLOBALS['THRIFT_ROOT'] = '/your/thrift/root';

include_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
include_once $GLOBALS['THRIFT_ROOT'].'/packages/Service/Service.php';
include_once $GLOBALS['THRIFT_ROOT'].'/transport/TPhpStream.php';
include_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';

class ServiceHandler implements ServiceIf {
  // Implement your interface and methods here
}

header('Content-Type: application/x-thrift');

$handler = new ServiceHandler();
$processor = new ServiceProcessor($handler);

// Use the TPhpStream transport to read/write directly from HTTP
$transport = new TPhpStream(TPhpStream::MODE_R | TPhpStream::MODE_W);
$protocol = new TBinaryProtocol($transport);

$transport->open();
$processor->process($protocol, $protocol);
$transport->close();
