服务器环境Ubuntu 18.04.5 LTS
PHP7.2.24
装置protoc
【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元
1.获取v3.13.0.1(截止2020.10.14)
wget https://codeload.github.com/protocolbuffers/protobuf/tar.gz/v3.13.0.1
2.解压
tar zxvf v3.13.0.1
cd protobuf-3.13.0.1
1.生成 configure 脚本;
./autogen.sh
2.编译装置
./configure --prefix=/usr/local/protobuf
make && make install
3.设置全局
export PATH=/usr/local/protobuf/bin:$PATH
4.查看装置胜利
protoc --version
呈现`libprotoc 3.13.0`即装置胜利
装置php-protobuf拓展
pecl install protobuf
接下来,将
`extension=protobuf.so`增加到 `php.ini` 文件(例如 `/etc/php/7.2/fpm/php.ini`)中。
查看php.ini地位
1.cli命令行 php --ini
2.phpinfo();
3.ps -ef | grep 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
composer require google/protobuf:^3.3
在composer.json配置
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/",
+"Toutiao\\":"protobuf/compile/Toutiao",
+"GPBMetadata\\":"protobuf/compile/GPBMetadata/Protobuf/Protos"
}
},
应用
//获取序列化的一行
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包,然而头条是protobuf2,emmm今天再看吧
未完待续