服务器环境Ubuntu 18.04.5 LTS
PHP7.2.24

装置protoc

1.获取v3.13.0.1(截止2020.10.14)wget https://codeload.github.com/protocolbuffers/protobuf/tar.gz/v3.13.0.12.解压tar zxvf v3.13.0.1 cd protobuf-3.13.0.11.生成 configure 脚本;./autogen.sh2.编译装置./configure --prefix=/usr/local/protobufmake && make install3.设置全局export PATH=/usr/local/protobuf/bin:$PATH4.查看装置胜利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 --ini2.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今天再看吧
未完待续