php protobuf 二进制,PHP环境中使用ProtoBuf数据格式

5af516028331bf486adc608f9a9a2ce5.png

1、syntax="proto3":表明使用的是proto3格式,如果不指定则为proto2

2、package test:定义包名为test,生成类时,会产生一个目录为test

3、message Person:消息主体内容,里面为各个字段的定义

二、生成对应的PHP类

定义好Person的格式后,该格式如果不生成我们所需要的类库,其实是无任何意义的,还google提供一个工具protoc生成我们要的类库。

1、安装protoc

安装地址:protobuf-php-3.5.1.tar.gz,目前最新为3.5.1

官方发布地址:https://github.com/google/protobuf/releases/tag/v3.5.1

解压并安装:

tar -zxvf protobuf-php-3.5.1.tar.gz

cd protobuf-3.5.1

./configure --prefix=/opt/soft/protobuf

make

make install

2、生成类库

/opt/soft/protobuf/bin/protoc --php_out=./ person.proto

生成后将在当前目录产生如下文件:

GPBMetadata/Person.php

Test/Person.php

三、在PHP中使用ProtoBuf

在PHP中使用ProtoBuf依赖一个protobuf的扩展,目前提供两种方式进行使用,1:php的c扩展,2:php的lib扩展包,这两者均可在刚才下载包里可以找到。

另外,也可以使用composer进行安装该依赖扩展:composer require google/protobuf

这里我主要是使用composer安装,应该它可以帮我产生autoload

安装好依赖后,我们就可以开始在php环境下使用protobuf了

1、序列化

include 'vendor/autoload.php';

include 'GPBMetadata/Person.php';

include 'Test/Person.php';

$person = new TestPerson();

$person->setName("lailaiji");

$person->setAge("28");

$person->setSex(true);

$data = $person->serializeToString();

file_put_contents('data.bin',$data);

2、反序列化

include 'vendor/autoload.php';

include 'GPBMetadata/Person.php';

include 'Test/Person.php';

$bindata = file_get_contents('./data.bin');

$person = new TestPerson();

$person->mergeFromString($bindata);

echo $person->getName();

可以正常地输出lailaiji

PHP常用的使用方法:

序列化:

1、serializeToString:序列化成二进制字符串

2、serializeToJsonString:序列化成JSON字符串

反序列化:

1、mergeFromString:二进制字符串反序列化

2、mergeFromJsonString:Json字符串反序列化

.proto的message解析

1、定义:

类型 变量名=位置;

如:int32 age=1;

这里需要区分,变量名后面的数字意义为该变量内容在二进制序列中的位置而不是变量的值,该数字必须是唯一不可重复使用。

2、目前支持的类型:

double,float,int32,int64,uint32 ,uint64,sint32,sint64

fixed32,fixed64,sfixed32,sfixed64,bool,bytes

推荐教程:《PHP》

PHP环境中使用ProtoBuf数据格式相关教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu14.04 开启root登陆

安装完成如需使用root身份登录,可打开终端输入以下命令:#设置root密码sudo passwd root#切换到root用户sudo -s想要在登录界面使用root身份登录,可编辑/etc/lightdm/目录下的lightdm.conf文件,如没有此文件,直接创建vi…

工具系列:PyCaret介绍_模型训练详细教程

工具系列:PyCaret介绍_模型训练详细教程 PyCaret初始化 setup任务:自动推断数据类型 必需参数默认转换实验记录模型验证GPU支持示例 PyCaret模型训练 compare_models 示例更改排序顺序只比较几个模型返回多个模型设置预算时间设置概率阈值禁用交叉验证在集群上进行…

php动态分页类

1 <?php2 3 /**4 * 页面名称&#xff1a;cls_page.php5 */6 class Page {7 private $each_disNums; //每页显示的条目数8 private $nums; //总条目数9 private $current_page; //当前被选中的页10 private $sub_pages; //每次显示的页数11 private …

php怎么调试小程序,教你如何配置微信小程序

这篇文章主要介绍了微信小程序 教程之小程序配置的相关资料,这里对app.json,pages,window等做了详细介绍&#xff0c;对于初学开发微信小程序的朋友&#xff0c;掌握这些还是比较重要的&#xff0c;需要的朋友可以参考下微信小程序——配置以下就是小编对小程序配置的资料进行的…

openssl-1.0.1e for arm

1.官网下载最新版本openssl-1.0.1e 2. ./config no-asmshared--prefix 说明&#xff1a;no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程。 shared 生成动态链接库。 --prefix 指定生成lib include bin目录的路径&#xff0c;不修改此项则默认为OPENSSLDIR目录。…

如何查看及修改Oracle的字符编码

1.方式一 select userenv(language) from dual; 2.方式二 用SYSDBA用户登录&#xff0c;执行如下SQL SELECT value$FROM sys.props$WHERE name ‘NLS_CHARACTERSET’ 或者&#xff1a; SELECT * FROM NLS_DATABASE_PARAMETERS 结果格式如下&#xff1a;NLS_CHARACTERSET UTF8 …

php中的控制器是什么意思,理解PHP中的MVC编程之控制器_php

简单来讲&#xff0c;控制器的作用就是接受请求。它使用获取的方法&#xff0c;在这里是通过URI&#xff0c;载入一个功能模块来刷新或者提交一个表述层。控制器将使用$_GET自动全局变量来判断载入哪一个模块。一个请求的例子&#xff0c;看起来像这样&#xff1a;http://examp…

softwave

hg apt-get install mercurial texinfo apt-get install texinfo svn apt-get install subversion mkpasswd apt-get install whois boost apt-get install libboost-dev boost yum install boost boost-devel boost-doc

我的20132014

默默的关注博客园已经小半年了&#xff0c;看着大神们分享的各种精彩文章&#xff0c;总是幻想着自己也能写出高质量的博文&#xff0c;可是自己只是一个刚工作小半年的菜鸟程序员&#xff0c;还达不到那样的高度。所以只能围观了。现在&#xff0c;作为2014年新的开始&#xf…

mysql php教程,MySQL PHP语法

MySQL PHP语法MySQL 可应用于多种语言&#xff0c;包括 PERL, C, C, JAVA 和 PHP。 在这些语言中&#xff0c;Mysql在PHP的web开发中是应用最广泛。在本教程中我们大部分实例都采用了PHP语言。如果你想了解Mysql在PHP中的应用&#xff0c;可以访问我们的 PHP中使用Mysql介绍。P…

linux C 获取日期时间

原文 http://blog.csdn.net/zhu244912654/article/details/8610219概述 世界标准时间&#xff08; Coordinated Universal Time &#xff0c; UTC &#xff09;&#xff0c;也就是大家所熟知的格林威治标准时间&#xff08; Greenwich Mean Time &#xff0c; GMT &#xff09…

GitHub---最简单的使用

大神就不要喷我了&#xff0c;写这个只是希望新人能够对自己写的项目更方便的本地管理。&#xff08;其实我也只会这点东西w&#xff09; 这两天稍微看了看GitHub&#xff0c;之前不是很明白这个版本控制器到底是什么意思&#xff0c;现在略微有了解&#xff0c;这是对项目代码…

php apache配置测试端口,详解安装配置Windows版apache服务器及压力测试

下载Apache1、下载地址&#xff1a;http://httpd.apache.org/download.cgi2、点击链接Files for Microsoft Windows&#xff1a;安装步骤1、先安装apache补丁1)下载地址&#xff1a;https://www.microsoft.com/zh-cn/download/confirmation.aspx?id481452)如果没有安装&#x…

Linux下boost库的安装

最近由于编译一个程序用到了C的boost库&#xff0c;所以便安装了这个库。但是&#xff0c;其中遇到了一些小问题。所以记录下来&#xff0c;以供别人参考。首先说一下我的环境&#xff1a;Ubuntu 12.04 32bit, gcc 4.6.3其实在ubuntu下&#xff0c;可以用一下命令直接安装sudo…

No projects are found to import

当导入项目报 No projects are found to import 时, 说明缺失一个.project[.classpath]文件,到别的项目中拷贝一份 然后再次导入会报 Some projects cannot be imported because they already exist in the workspace 那是因为你没有改文件中的name值,打开文件 修改name属性为你…

php 时间错误,PHP xdebug调试trace记录时间错误

调试生成的trace文件如下&#xff0c;(trace里的文件记录的时间是UTC)TRACE START [2018-01-12 02:39:46]0.0024 363464 0 -> calc_money(double, double) D:\wamp64\www\shakedown\index.php:100.0026 363464 >> 53.50.0027 363464 0 -> xdebug_stop_trace() D:\w…

ASCII,Unicode和UTF-8

1. ASCII码 我们知道&#xff0c;在计算机内部&#xff0c;所有的信息最终都表示为一个二进制的字符串。每一个二进制位&#xff08;bit&#xff09;有0和1两种状态&#xff0c;因此八个二进制位就可以组合出256种状态&#xff0c;这被称为一个字节&#xff08;byte&#xff09…

Android 使用SeekBar调节系统音量

以下是一个使用SeekBar来调节系统音量的实例&#xff1a; 1、XML&#xff1a; <SeekBar android:id"id/sound" android:layout_width"150px" android:layout_height"10px" android:max"100" //设置拖动条最大值 android:p…

matlab可达矩阵 结果,matlab求可达矩阵

matlab中可达矩阵的计算 2页 1下载券 邻接矩阵的可达矩阵及层... 2页 2下载券 邻接矩阵的一种计算方法 7页 免费 ISM算法(邻接矩阵求可达... 暂无......JAVA矩阵算法代码 4页 2下载券 可达矩阵新算法 2页 2下载券 基于ISM模型用matlab软件... 10页 2下载券 图邻接矩阵相关算法实…

muduo for v210

目标&#xff1a;将muduo移植到v210上面 内核版本&#xff1a;2.6.35.7 1. 修改最上层的CMakeLists.txt 1) 在CXX_FLAGS里&#xff0c;加上-DVALGRIND&#xff0c;这样SocketsOps.cc就不会报错了。 2) 在CXX_FLAGS里&#xff0c;修改-marchnative为-marcharmv4 3) set(CMAKE_…