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

本文介绍了一个PHP扩展,用于解包由Erlang `term_to_binary`生成的二进制数据,实现了类似Erlang的`binary_to_term/1`功能。该扩展包含`binary_to_term`函数,用于将Erlang的二进制数据转换为PHP数组,并提供错误处理函数。通过示例展示了如何在Erlang端封包数据,然后在PHP端读取并解包。此外,还提供了扩展的安装步骤和应用示例。
摘要由CSDN通过智能技术生成

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

相关文章

相关视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值