发布于2026-07-19 阅读(0)
扫一扫,手机访问
服务器环境为 Ubuntu 18.04.5 LTS,PHP 7.2.24,今天我们来梳理一下 protobuf 的安装与 PHP 扩展的集成过程。这套流程在实际项目中很常见,尤其是需要对接头条 DMP 数据包时,会用到 protobuf 的序列化与反序列化。下面直接进入正题。
首先,获取 protobuf 的源码包。这里用的是截至 2020 年 10 月 14 日的 v3.13.0.1 版本:
wget https://codeload.github.com/protocolbuffers/protobuf/tar.gz/v3.13.0.1
下载完成后解压:
tar zxvf v3.13.0.1
cd protobuf-3.13.0.1
接下来生成 configure 脚本:
./autogen.sh
然后编译安装,指定安装路径为 /usr/local/protobuf:
./configure --prefix=/usr/local/protobuf
make && make install
安装完成后,需要将 protoc 加入全局路径,方便后续调用:
export PATH=/usr/local/protobuf/bin:$PATH
验证是否成功,执行:
protoc --version
如果输出 libprotoc 3.13.0,说明安装成功。
PHP 端需要借助 pecl 来安装 protobuf 扩展:
pecl install protobuf
安装完成后,将 extension=protobuf.so 添加到 php.ini 配置文件中。php.ini 的位置可以通过以下几种方式查看:
php --iniphpinfo(); 函数查看ps -ef | grep php 找到进程对应的配置文件例如,在 /etc/php/7.2/fpm/php.ini 中追加该行。
在项目根目录下,执行以下命令将 .proto 文件编译为 PHP 类:
protoc --php_out="protobuf/compile" "protobuf/protos/DmpDataProto.proto"
编译后生成的目录结构如下:
├── compile
│ ├── GPBMetadata
│ │ └── Protobuf
│ │ └── Protos
│ │ └── DmpDataProto.php
│ └── Toutiao
│ └── Dmp
│ ├── DmpData.php
│ ├── IdItem_DataType.php
│ └── IdItem.php
└── protos
└── DmpDataProto.proto
项目中使用了 Composer,需要引入 Google 的 protobuf 库:
composer require google/protobuf:^3.3
然后在 composer.json 的 autoload 部分添加自动加载映射,让生成的类可以被正确加载:
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/",
"Toutiao\\": "protobuf/compile/Toutiao",
"GPBMetadata\\": "protobuf/compile/GPBMetadata/Protobuf/Protos"
}
},
之后执行 composer dump-autoload 刷新即可。
序列化一行数据:
public function decodeOneLine($line)
{
$idItem = new \Toutiao\Dmp\IdItem();
$idItem->setDataType(\Toutiao\Dmp\IdItem_DataType::IMEI);
$idItem->setId(strtolower($line));
$idItem->setTags('IMEI');
$binaryString = $idItem->serializeToString();
return $binaryString;
}
反序列化一行数据:
public function decodeOneLine($line)
{
$item = new \Toutiao\Dmp\IdItem();
$item->mergeFromString($line);
return $item->getId();
}
这套流程主要是为了上传头条 DMP 包,不过头条那边用的是 protobuf 2,和当前版本略有差异,后续有空再深入看看。
未完待续
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8