protobuf简介

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前只提供了 C++、Java、Python 三种语言的 API。

官方不支持PHP,不用担心,高手在民间。上Github搜索一下就有了。

安装protobuf

查看protobuf版本

编译php的protobuf扩展

在Google上搜索 protobuf php 可在github上找到两个与之相关的开源项目,它们是:

https://github.com/allegro/php-protobuf
https://github.com/drslump/Protobuf-PHP

在这里主要介绍allegro的编译方法(别问为什么,因为drslump的编译方法在我的电脑上不成功 -_- ||)。

下面介绍centos(CentOS Linux release 7.0.1406 (Core))环境中下载,编译:

安装依赖

假如phpize不在默认目录,可以使用 which phpize查看,然后写全路径去执行phpize,我这里是默认在 /usr/bin目录,可以直接执行,执行之后可以看到以下输出

php-config的目录也使用which php-config这个命令去查看路径,这一步需要安装gcc

安装完gcc之后则开始正式安装pb

最后会看到类似这样的安装提示,则说明安装成功。

现已成功把pb编译至/usr/lib64/php/modules/protobuf.so

开启php的pb扩展

找到php.in,加入这行代码:

重启nginx

假如是Apache,则重启Apache

编译proto文件

新建一个简单的proto文件:

输入以下内容:

编译。注意,这里需要引用到protoc-php.php这个文件,注意路径。

编译成功后会在当前目录生成一个pb_proto_test.php文件,内容如下:

这里会继承ProtobufMessage类,它是在protobuf.so中自动加载的。
写一个测试类来测试一下:

运行

可以看到输出: