下载protobuf编译器(免安装版,解压即可使用)
[root@localhost ~]# cd /program/protoc
[root@localhost protoc]# wget https://github.com/protocolbuffers/protobuf/releases/download/v23.2/protoc-23.2-linux-x86_64.zip
[root@localhost protoc]# unzip -oq protoc-23.2-linux-x86_64.zip
[root@localhost protoc]# ./bin/protoc --version
libprotoc 23.2
[root@localhost protoc]# rm -rf protoc-23.2-linux-x86_64.zip
将/program/protoc/bin目录加入系统环境变量
[root@localhost ~]# vim /etc/profile
export PATH=$PATH:/program/nginx/sbin
export PATH=$PATH:/program/mysql/bin
export PATH=$PATH:/program/php/bin
export PATH=$PATH:/program/protoc/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# protoc --version
libprotoc 23.2
[root@localhost ~]#
创建*.proto文件并将其编译
[root@localhost protobuf]# vim Person.proto
syntax="proto3"; // 使用proto3,若不指定则使用proto2
package MaNong; // 包名
// 定义一个名为Person的message
message Person {
string name = 1; // 姓名;等号右边的数字是字段序号,而不是字段值
int32 age = 2; // 年龄
string gender = 3; // 性别
}
[root@localhost protobuf]# protoc --php_out=./ Person.proto # 编译Person.proto文件,生成的文件保存在当前目录
[root@localhost protobuf]# ls
GPBMetadata MaNong Person.proto # 编译会生成GPBMetadata和MaNong两个目录,里面都有一个Person.php文件
[root@localhost protobuf]#
说明:不要编辑GPBMetadata/Person.php和MaNong/Person.php这两个文件。
使用示例
<?php
require_once __DIR__ . '/GPBMetadata/Person.php';
require_once __DIR__ . '/MaNong/Person.php';
$person = new MaNong\Person();
$person->setName('张三');
$person->setAge(18);
$person->setGender('男');
$file = __DIR__ . '/person.bin';
//========== 把数据序列化并保存到文件 ==========//
$bin = $person->serializeToString();
file_put_contents($file, $bin);
unset($person, $bin);
//========== 从文件读取数据并反序列化 ==========//
$person = new MaNong\Person();
$bin = file_get_contents($file);
$person->mergeFromString($bin);
$name = $person->getName();
$age = $person->getAge();
$gender = $person->getGender();
echo "俺叫{$name}({$gender}),今年{$age}岁。"; // 俺叫张三(男),今年18岁。