热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP扩充模块解包(由term_to_binary生成的)Erlangextterm格式的二进制数据

PHP扩展模块解包(由term_to_binary生成的)Erlangextterm格式的二进制数据1、引言《初探Erlang的term_to_binary数据封包机制》一文中已经介绍了Erlang扩展term格式(Erlangexternaltermforma
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扩展导出了以下三个函数:

  1. array binary_to_term(string $binary) 返回解包后的数组。
  2. int binary_errno () 返回上次调用binary_to_term产生的错误代号。0为无错语,1为二进制内容中出现在不支持的数据类型。
  3. 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(<<"insert test(bin) values(~s);">>, [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
推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • 探讨在开发、学习和实验过程中,使用 VMware 和 Docker 的优劣,帮助用户根据具体需求做出最佳选择。 ... [详细]
  • 本文详细介绍了在Mac操作系统中使用Python连接MySQL数据库的方法,包括常见的错误处理及解决方案。 ... [详细]
  • Windows环境下RabbitMQ安装详尽指南
    Windows环境下RabbitMQ安装详尽指南 ... [详细]
author-avatar
我的天空有点蓝2012_916
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有