Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: c35d48f3d1
Fetching contributors…

Cannot retrieve contributors at this time

128 lines (93 sloc) 4.266 kb
Igbinary is a drop in replacement for the standard php serializer. Instead of
time and space consuming textual representation, igbinary stores php data
structures in compact binary form. Savings are significant when using
memcached or similar memory based storages for serialized data. About 50%
reduction in storage requirement can be expected. Specific number depends on
your data.
Unserialization performance is at least on par with the standard PHP serializer.
Serialization performance depends on the "compact_strings" option which enables
duplicate string tracking. String are inserted to a hash table which adds some
overhead. In usual scenarios this does not have much significance since usage
pattern is "serialize rarely, unserialize often". With "compact_strings"
option igbinary is usually a bit slower than the standard serializer. Without
it, a bit faster.
- Supports same data types as the standard PHP serializer: null, bool, int,
float, string, array and objects.
- ``__autoload`` & ``unserialize_callback_func``
- ``__sleep`` & ``__wakeup``
- Serializable -interface
- Data portability between platforms (32/64bit, endianess)
- Tested on Linux amd64, Linux ARM, Mac OSX x86, HP-UX PA-RISC and NetBSD sparc64
- Hooks up to APC opcode cache as a serialization handler (APC 3.1.7+)
- Compatible with PHP 5.2 and 5.3
Implementation details
Storing complex PHP data structures like arrays of associative arrays
with the standard PHP serializer is not very space efficient. The main
reasons in order of significance are (at least in our applications):
1. Array keys are repeated redundantly.
2. Numerical values are plain text.
3. Human readability adds some overhead.
Igbinary uses two specific strategies to minimize the size of the serialized
1. Repetitive strings are stored only once. Collections of objects benefit
significantly from this. See "compact_strings" option.
2. Numerical values are stored in the smallest primitive data type
*123* = ``int8_t``,
*1234* = ``int16_t``,
*123456* = ``int32_t``
... and so on.
3. ( Well, it is not human readable ;)
How to use
Add the following lines to your php.ini:
# Load igbinary extension
# Use igbinary as session serializer
# Enable or disable compacting of duplicate strings
# The default is On.
# Use igbinary as serializer in APC cache (3.1.7 or later)
.. and in your php code replace serialize and unserialize function calls
with ``igbinary_serialize`` and ``igbinary_unserialize``.
Sometimes phpize must be substituted with phpize5. In such cases the following
option must be given to configure script: "--with-php-config=.../php-config5"
1. phpize
With GCC:
2. ./configure CFLAGS="-O2 -g" --enable-igbinary
With ICC (Intel C Compiler)
2. ./configure CFLAGS=" -no-prec-div -O3 -xO -unroll2 -g" CC=icc --enable-igbinary
3. make
4. ( make test )
5. make install
6. is installed to the default extension directory
Bugs & Contributions
Mailing list for bug reports and other development discussion can be found
The preferred ways for contributions are pull requests and email patches
(in git format). Feel free to fork at
Utilizing in other extensions
Igbinary can be called from other extensions fairly easily. Igbinary installs
its header file to ext/igbinary/igbinary.h. There are just two straighforward
functions: igbinary_serialize and igbinary_unserialize. Look at igbinary.h for
prototypes and usage.
Add PHP_ADD_EXTENSION_DEP(yourextension, igbinary) to your config.m4 in case
someone wants to compile both of them statically into php.
Where does the name "igbinary" come from? There was once a similar project
called fbinary but it has disappeared from the Internet a long time ago. Its
architecture wasn't particularly clean either. IG is an abbreviation for a
finnish social networking site IRC-Galleria (
Jump to Line
Something went wrong with that request. Please try again.