Thrift PHP Software Library

Author: Mark Slee (mcslee@facebook.com)
Last Modified: 2007-Mar-05

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

Using Thrift with PHP
=====================

Thrift requires PHP 5. Thrift makes as few assumptions about your PHP
environment as possible while trying to make some more advanced PHP
features (i.e. APC cacheing using asbolute path URLs) as simple as possible.

To use Thrift in your PHP codebase, take the following steps:

#1) Copy all of thrift/lib/php/src into your PHP codebase
#2) Set $GLOBALS['THRIFT_ROOT'] to the path you installed Thrift
#3) include_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';

Note that #3 must be done before including any other Thrift files.
If you do not do #2, Thrift.php will set this global for you, but it will be
done using dirname(__FILE__), which is less efficient than providing the static
string yourself.

When you generate a Thrift package using the compiler, it makes an assumption
about where your generated code will live. If your file is "MyPackage.thrift",
the generated files must be installed into:

$GLOBALS['THRIFT_ROOT'].'/packages/MyPackage/';

This allows the code generator to compile your code without any extra flags
for the target directory names while still allowing your include paths to
be absolute (if you have an absolute THRIFT_ROOT).

Dependencies
============

PHP_INT_SIZE

  This built-in signals whether your architecture is 32 or 64 bit and is
  used by the TBinaryProtocol to properly use pack() and unpack() to
  serialize data.

apc_fetch(), apc_store()

  APC cache is used by the TSocketPool class. If you do not have APC installed,
  Thrift will fill in null stub function definitions.
