一、环境配置准备
当前版本为php7.4安装方式,对应protobuf版本3.24.4 其他php版本对应扩展(pecl.php.net/package/pro...)
PHP中安装protobuf扩展
安装protobuf
markdown
apt install php-pear
pecl install protobuf-3.24.4
开启protobuf扩展 ** 添加 protobuf 扩展到 php.ini
ini
extension=protobuf.so
以Debian为例 安装proto
安装proto
markdown
sudo apt update
sudo apt install protobuf-compiler
二、通过.proto文件生成PHP消息文件
定义一个消息类型
创建一个关于Kk的定义文件(以.proto为后缀),如示例为kk.proto,文件内容如下:
ini
syntax="proto3";
message Kk{
string name=1;
int32 age=2;
bool sex=3;
}
生成类库
ini
protoc --php_out=./ kk.proto
生成后将在当前目录产生如下文件:
markdown
GPBMetadata/Kk.php
Kk.php
三、在PHP中使用ProtoBuf
使用composer进行安装该依赖扩展:composer require google/protobuf
序列化
php
<?php
include dirname(__FILE__) . '/../../../extend/proto/GPBMetadata/Kk.php';
include dirname(__FILE__) . '/../../../extend/proto/Kk.php';
$kk = new Kk();
$kk->setName("姓名");
$kk->setAge("18");
$kk->setsex(true);
$res = $kk->serializeToString();
file_put_contents('data.bin',$res);
echo $res;
$bindata = file_get_contents('./data.bin');
$person->mergeFromString($bindata);
echo $person->getName();
halt($bindata);
PHP常用的使用方法:
序列化:
1、serializeToString:序列化成二进制字符串
2、serializeToJsonString:序列化成JSON字符串
反序列化:
1、mergeFromString:二进制字符串反序列化
2、mergeFromJsonString:Json字符串反序列化