php 解包二进制,PHP扩充模块解包(由term_to_binary生成的)Erlang ext term格式的二进制数据...

PHP扩展模块解包(由term_to_binary生成的)Erlang ext term格式的二进制数据

1、引言

《初探Erlang的term_to_binary数据封包机制》一文中已经介绍了Erlang扩展term格式(Erlang external term format)binary的作用,

有些同学想把Erlang数据通过term_to_binary函数封包后以二制进形式存入数据库,然后用PHP读取并解包成PHP数组。

为了解决上面的这种应用场合中遇到的问题,

参考peb(Php-Erlang Bridge)扩展写了这个类似erlang:binary_to_term/1函数功能的binary扩展,

可以理解为是PHP版的binary_to_term。

2、binary扩展简介

2.1、这个binary扩展导出了以下三个函数:

array binary_to_term(string $binary) 返回解包后的数组。

int binary_errno () 返回上次调用binary_to_term产生的错误代号。0为无错语,1为二进制内容中出现在不支持的数据类型。

string binary_error () 返回上次调用binary_to_term产生的错误信息,如果没有出错则为空。

2.2、binary扩展模块下载地址:

http://download.csdn.net/download/u011471961/6447631

3、binary扩展的安装

Install On *nux:

Step 1:

---------

unzip binary.zip

cd ./binary

phpize或phpize5

Step 2:

---------

执行configure前先确认Erlang安装目录和php-config路径,下面的configure只是示例,可根据实际路径修改。

在linux下安装:

./configure CC="gcc -L/usr/local/lib/erlang/lib/erl_interface-3.7.11/lib -I/usr/local/lib/erlang/lib/erl_interface-3.7.11/include" --enable-binary --with-php-config=/usr/local/php/bin/php-config

OR:

./configure CC="gcc -L/usr/local/lib/erlang/lib/erl_interface-3.7.11/lib -I/usr/local/lib/erlang/lib/erl_interface-3.7.11/include" --enable-binary --with-php-config=/usr/bin/php-config5

在苹果电脑上安装:

sudo MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" ./configure CC="gcc

-m32 -L/usr/local/lib/erlang/lib/erl_interface-3.7.6/lib -I/usr/local/lib/erlang/lib/erl_interface-3.7.6/include" --enable-binary

Step 3:

---------

make

Step 4:

---------

make test

Step 5:

---------

make install

Step 6:

---------

修改php.ini文件:

extension=binary.so

OR:

extension=/path/to/binary.so

Step 7:

---------

重启php-cgi或apache

Step 8:

---------

通过phpinfo()函数或命令(php -m)查看是否加载了binary模块。

4、binary扩展应用示例

4.1、创建mysql数据表

CREATE TABLE IF NOT EXISTS `test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`bin` varbinary(255) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

4.2、在Erlang端写入数据

test() ->

Data = [{name, rolong},{phone, 888888}],

Bin = term_to_binary(Data),

%% 写入数据库的接口依自己情况而定

db:execute(<>, [Bin]).

4.3、在PHP中读取并解包成PHP数组

getOne($sql);

$data = binary_to_term($bin);

echo '';

var_dump($data);

echo '';

输出

array(1) {

[0]=>

array(2) {

[0]=>

array(2) {

[0]=>

string(4) "name"

[1]=>

string(6) "rolong"

}

[1]=>

array(2) {

[0]=>

string(5) "phone"

[1]=>

int(888888)

}

}

}

4、小结

在binary扩展模块中,部分较少用的数据类型暂末支持,有特殊需要的同学可以在源码中自行修改实现。

Erlang提供了数据封包、解包的C接口,可参考

http://www.erlang.org/doc/apps/erl_interface/index.html

相关文章

相关视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值