php protobuf 二进制,PHP环境中使用ProtoBuf数据格式
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數據格式相關教程
總結
以上是生活随笔為你收集整理的php protobuf 二进制,PHP环境中使用ProtoBuf数据格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2000多年前中国豪车长啥样?用金银装饰
- 下一篇: python生成验证码_python之验