Skip to content

msgpack/msgpack-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f510734 · Sep 26, 2024
Sep 25, 2024
Dec 20, 2019
Nov 20, 2019
Sep 25, 2024
Aug 20, 2024
Nov 20, 2019
Aug 17, 2021
Jan 14, 2021
Dec 20, 2019
Jul 17, 2010
Jun 2, 2023
Sep 8, 2021
Jun 22, 2015
Nov 30, 2020
Aug 20, 2024
Aug 20, 2024
Dec 18, 2019
Sep 23, 2020
Jun 9, 2015
Jun 9, 2015
Aug 20, 2024
Aug 19, 2024
Aug 20, 2024
Aug 24, 2021
Sep 26, 2024
Sep 25, 2024

Repository files navigation

Msgpack for PHP

Build Status

This extension provides an API for communicating with MessagePack serialization.

MessagePack is a binary-based efficient object serialization library. It enables to exchange structured objects between many languages just like JSON. But unlike JSON, it is very fast and small.

Requirement

  • PHP 7.0 +

Install

Install from PECL

Msgpack is a PECL extension, thus you can simply install it by:

pecl install msgpack

Compile Msgpack from source

/path/to/phpize
./configure --with-php-config=/path/to/php-config
make && make install

Example

<?php
$data = array(0 => 1, 1 => 2, 2 => 3);
$msg = msgpack_pack($data);
$data = msgpack_unpack($msg);

Advanced Example

<?php
$data = array(0 => 1, 1 => 2, 2 => 3);
$packer = new \MessagePack(false);
// ^ same as $packer->setOption(\MessagePack::OPT_PHPONLY, false);
$packed = $packer->pack($data);

$unpacker = new \MessagePackUnpacker(false);
// ^ same as $unpacker->setOption(\MessagePack::OPT_PHPONLY, false);
$unpacker->feed($packed);
$unpacker->execute();
$unpacked = $unpacker->data();
$unpacker->reset();

Advanced Streaming Example

<?php
$data1 = array(0 => 1, 1 => 2, 2 => 3);
$data2 = array("a" => 1, "b" => 2, "c" => 3);

$packer = new \MessagePack(false);
$packed1 = $packer->pack($data1);
$packed2 = $packer->pack($data2);

$unpacker = new \MessagePackUnpacker(false);
$buffer = "";
$nread = 0;

//Simulating streaming data :)
$buffer .= $packed1;
$buffer .= $packed2;

while(true) {
   if($unpacker->execute($buffer, $nread)) {
       $msg = $unpacker->data();

       var_dump($msg);

       $unpacker->reset();
       $buffer = substr($buffer, $nread);
       $nread = 0;
       if(!empty($buffer)) {
            continue;
       }
   }
   break;
}

Resources